diff --git a/.codeqlmanifest.json b/.codeqlmanifest.json index fd009b2b1ff..24e20e77278 100644 --- a/.codeqlmanifest.json +++ b/.codeqlmanifest.json @@ -4,8 +4,10 @@ "*/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", @@ -13,8 +15,6 @@ "misc/legacy-support/*/qlpack.yml", "misc/suite-helpers/qlpack.yml", "ruby/extractor-pack/codeql-extractor.yml", - "ruby/ql/consistency-queries/qlpack.yml", - "ql/ql/consistency-queries/qlpack.yml", "ql/extractor-pack/codeql-extractor.yml" ], "versionPolicies": { diff --git a/.gitattributes b/.gitattributes index e705e8f40d9..5953177325f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -50,4 +50,15 @@ *.pdb -text java/ql/test/stubs/**/*.java linguist-generated=true -java/ql/test/experimental/stubs/**/*.java linguist-generated=true \ No newline at end of file +java/ql/test/experimental/stubs/**/*.java linguist-generated=true + +# 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 +# for those testing dbscheme files. +*/ql/lib/upgrades/initial/*.dbscheme -text + +# Generated test files - these are synced from the standard JavaScript libraries using +# `javascript/ql/experimental/adaptivethreatmodeling/test/update_endpoint_test_files.py`. +javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/autogenerated/**/*.js linguist-generated=true -merge +javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/autogenerated/**/*.ts linguist-generated=true -merge diff --git a/.github/workflows/check-change-note.yml b/.github/workflows/check-change-note.yml index 5701e751923..672202444bb 100644 --- a/.github/workflows/check-change-note.yml +++ b/.github/workflows/check-change-note.yml @@ -6,8 +6,11 @@ on: paths: - "*/ql/src/**/*.ql" - "*/ql/src/**/*.qll" + - "*/ql/lib/**/*.ql" + - "*/ql/lib/**/*.qll" - "!**/experimental/**" - "!ql/**" + - ".github/workflows/check-change-note.yml" jobs: check-change-note: diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a381c9f186c..312feb3359b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -27,6 +27,11 @@ jobs: pull-requests: read steps: + - name: Setup dotnet + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.101 + - name: Checkout repository uses: actions/checkout@v2 @@ -51,7 +56,7 @@ jobs: # uses a compiled language - run: | - dotnet build csharp + dotnet build csharp /p:UseSharedCompilation=false - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@main diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml new file mode 100644 index 00000000000..ca7bc176d6d --- /dev/null +++ b/.github/workflows/csv-coverage-metrics.yml @@ -0,0 +1,43 @@ +name: "Publish framework coverage as metrics" + +on: + schedule: + - cron: '5 0 * * *' + push: + branches: + - main + workflow_dispatch: + pull_request: + branches: + - main + paths: + - ".github/workflows/csv-coverage-metrics.yml" + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Setup CodeQL + uses: ./.github/actions/fetch-codeql + - name: Create empty database + run: | + DATABASE="${{ runner.temp }}/java-database" + PROJECT="${{ runner.temp }}/java-project" + mkdir -p "$PROJECT/src/tmp/empty" + echo "class Empty {}" >> "$PROJECT/src/tmp/empty/Empty.java" + codeql database create "$DATABASE" --language=java --source-root="$PROJECT" --command 'javac src/tmp/empty/Empty.java' + - 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 + with: + name: metrics.sarif + path: metrics.sarif + retention-days: 20 + - name: Upload SARIF file + uses: github/codeql-action/upload-sarif@v1 + with: + sarif_file: metrics.sarif diff --git a/.github/workflows/js-ml-tests.yml b/.github/workflows/js-ml-tests.yml new file mode 100644 index 00000000000..ad485645737 --- /dev/null +++ b/.github/workflows/js-ml-tests.yml @@ -0,0 +1,67 @@ +name: JS ML-powered queries tests + +on: + push: + paths: + - "javascript/ql/experimental/adaptivethreatmodeling/**" + - .github/workflows/js-ml-tests.yml + branches: + - main + - "rc/*" + pull_request: + paths: + - "javascript/ql/experimental/adaptivethreatmodeling/**" + - .github/workflows/js-ml-tests.yml + +defaults: + run: + working-directory: javascript/ql/experimental/adaptivethreatmodeling + +jobs: + qlformat: + name: Check QL formatting + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: ./.github/actions/fetch-codeql + + - name: Check QL formatting + run: | + find . "(" -name "*.ql" -or -name "*.qll" ")" -print0 | \ + xargs -0 codeql query format --check-only + + qlcompile: + name: Check QL compilation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: ./.github/actions/fetch-codeql + + - name: Check QL compilation + run: | + codeql query compile \ + --check-only \ + --ram 5120 \ + --additional-packs "${{ github.workspace }}" \ + --threads=0 \ + -- \ + lib modelbuilding src + + qltest: + name: Run QL tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: ./.github/actions/fetch-codeql + + - name: Run QL tests + run: | + codeql test run \ + --threads=0 \ + --ram 5120 \ + --additional-packs "${{ github.workspace }}" \ + -- \ + test diff --git a/.github/workflows/mad_modelDiff.yml b/.github/workflows/mad_modelDiff.yml new file mode 100644 index 00000000000..a4b9169b44e --- /dev/null +++ b/.github/workflows/mad_modelDiff.yml @@ -0,0 +1,103 @@ +name: Models as Data - Diff + +on: + workflow_dispatch: + inputs: + projects: + description: "The projects to generate models for" + required: true + default: '["netty/netty"]' + pull_request: + branches: + - main + paths: + - "java/ql/src/utils/model-generator/**/*.*" + - ".github/workflows/mad_modelDiff.yml" + +permissions: + contents: read + +jobs: + model-diff: + name: Model Difference + runs-on: ubuntu-latest + if: github.repository == 'github/codeql' + strategy: + matrix: + 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 + if: github.event.pull_request + with: + path: codeql-pr + - name: Clone github/codeql from main + uses: actions/checkout@v2 + with: + path: codeql-main + ref: main + - uses: ./codeql-main/.github/actions/fetch-codeql + - name: Download database + env: + SLUG: ${{ matrix.slug }} + run: | + set -x + mkdir lib-dbs + SHORTNAME=${SLUG//[^a-zA-Z0-9_]/} + projectId=`curl -s https://lgtm.com/api/v1.0/projects/g/${SLUG} | jq .id` + curl -L "https://lgtm.com/api/v1.0/snapshots/$projectId/java" -o "$SHORTNAME.zip" + unzip -q -d "${SHORTNAME}-db" "${SHORTNAME}.zip" + mkdir "lib-dbs/$SHORTNAME/" + mv "${SHORTNAME}-db/"$(ls -1 "${SHORTNAME}"-db)/* "lib-dbs/${SHORTNAME}/" + - name: Generate Models (PR and main) + run: | + set -x + mkdir tmp-models + MODELS=`pwd`/tmp-models + DATABASES=`pwd`/lib-dbs + + analyzeDatabaseWithCheckout() { + QL_VARIANT=$1 + DATABASE=$2 + cd codeql-$QL_VARIANT + SHORTNAME=`basename $DATABASE` + python java/ql/src/utils/model-generator/GenerateFlowModel.py $DATABASE $MODELS/${SHORTNAME}.qll + mv $MODELS/${SHORTNAME}.qll $MODELS/${SHORTNAME}Generated_${QL_VARIANT}.qll + cd .. + } + + for d in $DATABASES/*/ ; do + ls -1 "$d" + + analyzeDatabaseWithCheckout "main" $d + if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]] + then + analyzeDatabaseWithCheckout "pr" $d + fi + done + - name: Install diff2html + if: github.event.pull_request + run: | + npm install -g diff2html-cli + - name: Generate Model Diff + if: github.event.pull_request + run: | + set -x + MODELS=`pwd`/tmp-models + ls -1 tmp-models/ + for m in $MODELS/*_main.qll ; do + t="${m/main/"pr"}" + basename=`basename $m` + name="diff_${basename/_main.qll/""}" + (diff -w -u $m $t | diff2html -i stdin -F $MODELS/$name.html) || true + done + - uses: actions/upload-artifact@v2 + with: + name: models + path: tmp-models/*.qll + retention-days: 20 + - uses: actions/upload-artifact@v2 + with: + name: diffs + path: tmp-models/*.html + retention-days: 20 diff --git a/.github/workflows/mad_regenerate-models.yml b/.github/workflows/mad_regenerate-models.yml new file mode 100644 index 00000000000..03e64816f9d --- /dev/null +++ b/.github/workflows/mad_regenerate-models.yml @@ -0,0 +1,62 @@ +name: Regenerate framework models + +on: + workflow_dispatch: + schedule: + - cron: "30 2 * * *" + pull_request: + branches: + - main + paths: + - ".github/workflows/mad_regenerate-models.yml" + +jobs: + regenerate-models: + runs-on: ubuntu-latest + strategy: + matrix: + # placeholder required for each axis, excluded below, replaced by the actual combinations (see include) + slug: ["placeholder"] + ref: ["placeholder"] + include: + - slug: "apache/commons-io" + ref: "8985de8fe74f6622a419b37a6eed0dbc484dc128" + exclude: + - slug: "placeholder" + ref: "placeholder" + steps: + - name: Clone self (github/codeql) + uses: actions/checkout@v2 + - name: Setup CodeQL binaries + uses: ./.github/actions/fetch-codeql + - name: Clone repositories + uses: actions/checkout@v2 + with: + path: repos/${{ matrix.ref }} + ref: ${{ matrix.ref }} + repository: ${{ matrix.slug }} + - name: Build database + env: + SLUG: ${{ matrix.slug }} + REF: ${{ matrix.ref }} + run: | + mkdir dbs + cd repos/${REF} + SHORTNAME=${SLUG//[^a-zA-Z0-9_]/} + codeql database create --language=java ../../dbs/${SHORTNAME} + - name: Regenerate models in-place + env: + SLUG: ${{ matrix.slug }} + run: | + SHORTNAME=${SLUG//[^a-zA-Z0-9_]/} + java/ql/src/utils/model-generator/RegenerateModels.py "${SLUG}" dbs/${SHORTNAME} + - name: Stage changes + run: | + find java -name "*.qll" -print0 | xargs -0 git add + git status + git diff --cached > models.patch + - uses: actions/upload-artifact@v2 + with: + name: patch + path: models.patch + retention-days: 7 diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index 9eaadb9df27..255540fd49d 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -31,13 +31,13 @@ jobs: uses: actions/cache@v2 with: path: ${{ runner.temp }}/query-pack.zip - key: queries-${{ hashFiles('ql/**/*.ql*') }}-${{ hashFiles('ql/ql/src/ql.dbscheme*') }}-${{ steps.get-codeql-version.outputs.version }} + key: queries-${{ hashFiles('ql/**/*.ql*') }}-${{ hashFiles('ql/**/qlpack.yml') }}-${{ hashFiles('ql/ql/src/ql.dbscheme*') }}-${{ steps.get-codeql-version.outputs.version }} - name: Build query pack if: steps.cache-queries.outputs.cache-hit != 'true' run: | cd ql/ql/src "${CODEQL}" pack create - cd .codeql/pack/codeql/ql-all/0.0.0 + cd .codeql/pack/codeql/ql/0.0.0 zip "${PACKZIP}" -r . env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} @@ -189,4 +189,11 @@ jobs: uses: github/codeql-action/analyze@erik-krogh/ql with: category: "ql-for-ql-${{ matrix.folder }}" + - name: Copy sarif file to CWD + run: cp ../results/ql.sarif ./${{ matrix.folder }}.sarif + - name: Sarif as artifact + uses: actions/upload-artifact@v2 + 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 42100be5178..c103f64ede9 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -17,7 +17,7 @@ jobs: CODEQL_THREADS: 4 # TODO: remove this once it's set by the CLI strategy: matrix: - repo: + repo: - github/codeql - github/codeql-go runs-on: ubuntu-latest @@ -35,7 +35,7 @@ jobs: ~/.cargo/registry ~/.cargo/git ql/target - key: ${{ runner.os }}-qltest-cargo-${{ hashFiles('**/Cargo.lock') }} + key: ${{ runner.os }}-qltest-cargo-${{ hashFiles('ql/**/Cargo.lock') }} - name: Build Extractor run: cd ql; env "PATH=$PATH:`dirname ${CODEQL}`" ./create-extractor-pack.sh env: diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 5037315392b..2e5eb845ed5 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -29,24 +29,24 @@ jobs: ~/.cargo/registry ~/.cargo/git ql/target - key: ${{ runner.os }}-qltest-cargo-${{ hashFiles('**/Cargo.lock') }} + key: ${{ runner.os }}-qltest-cargo-${{ hashFiles('ql/**/Cargo.lock') }} - name: Build extractor run: | cd ql; codeqlpath=$(dirname ${{ steps.find-codeql.outputs.codeql-path }}); env "PATH=$PATH:$codeqlpath" ./create-extractor-pack.sh - name: Run QL tests - run: | + run: | "${CODEQL}" test run --check-databases --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --search-path "${{ github.workspace }}/ql/extractor-pack" --consistency-queries ql/ql/consistency-queries ql/ql/test env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - name: Check QL formatting - run: | + run: | find ql/ql "(" -name "*.ql" -or -name "*.qll" ")" -print0 | xargs -0 "${CODEQL}" query format --check-only env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - name: Check QL compilation - run: | + run: | "${CODEQL}" query compile --check-only --threads=4 --warnings=error --search-path "${{ github.workspace }}/ql/extractor-pack" "ql/ql/src" "ql/ql/examples" env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index b55d9c353d6..63aff63b9d6 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -50,7 +50,7 @@ jobs: ~/.cargo/registry ~/.cargo/git ruby/target - key: ${{ runner.os }}-rust-cargo-${{ hashFiles('**/Cargo.lock') }} + key: ${{ runner.os }}-ruby-rust-cargo-${{ hashFiles('ruby/rust-toolchain.toml', 'ruby/**/Cargo.lock') }} - name: Check formatting run: cargo fmt --all -- --check - name: Build diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index 8fa11004561..99dfe4ba1ca 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -24,27 +24,53 @@ defaults: working-directory: ruby jobs: - qltest: + qlformat: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: ./.github/actions/fetch-codeql - - uses: ./ruby/actions/create-extractor-pack - - name: Run QL tests - run: | - codeql test run --threads=0 --ram 5000 --search-path "${{ github.workspace }}/ruby/extractor-pack" --check-databases --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --consistency-queries ql/consistency-queries ql/test - env: - GITHUB_TOKEN: ${{ github.token }} - 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: ./.github/actions/fetch-codeql - name: Check QL compilation run: | codeql query compile --check-only --threads=0 --ram 5000 --warnings=error "ql/src" "ql/examples" env: GITHUB_TOKEN: ${{ github.token }} + qlupgrade: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/fetch-codeql - name: Check DB upgrade scripts run: | echo >empty.trap codeql dataset import -S ql/lib/upgrades/initial/ruby.dbscheme testdb empty.trap codeql dataset upgrade testdb --additional-packs ql/lib diff -q testdb/ruby.dbscheme ql/lib/ruby.dbscheme + - name: Check DB downgrade scripts + run: | + echo >empty.trap + rm -rf testdb; codeql dataset import -S ql/lib/ruby.dbscheme testdb empty.trap + codeql resolve upgrades --format=lines --allow-downgrades --additional-packs downgrades \ + --dbscheme=ql/lib/ruby.dbscheme --target-dbscheme=downgrades/initial/ruby.dbscheme | + xargs codeql execute upgrades testdb + diff -q testdb/ruby.dbscheme downgrades/initial/ruby.dbscheme + qltest: + runs-on: ubuntu-latest + strategy: + matrix: + slice: ["1/2", "2/2"] + steps: + - uses: actions/checkout@v2 + - uses: ./.github/actions/fetch-codeql + - uses: ./ruby/actions/create-extractor-pack + - name: Run QL tests + run: | + codeql test run --threads=0 --ram 5000 --slice ${{ matrix.slice }} --search-path "${{ github.workspace }}/ruby/extractor-pack" --check-databases --check-unused-labels --check-repeated-labels --check-redefined-labels --check-use-before-definition --consistency-queries ql/consistency-queries ql/test + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml new file mode 100644 index 00000000000..2547b34d6a8 --- /dev/null +++ b/.github/workflows/validate-change-notes.yml @@ -0,0 +1,29 @@ +name: Validate change notes + +on: + push: + paths: + - "*/ql/*/change-notes/**/*" + - ".github/workflows/validate-change-notes.yml" + branches: + - main + - "rc/*" + pull_request: + paths: + - "*/ql/*/change-notes/**/*" + - ".github/workflows/validate-change-notes.yml" + +jobs: + check-change-note: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Setup CodeQL + uses: ./.github/actions/fetch-codeql + + - name: Fail if there are any errors with existing change notes + + run: | + codeql pack release --groups cpp,csharp,java,javascript,python,ruby,-examples,-test,-experimental diff --git a/CODEOWNERS b/CODEOWNERS index 15cacb6ed65..6de2effd896 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -13,6 +13,9 @@ /python/**/experimental/**/* @github/codeql-python @xcorail /ruby/**/experimental/**/* @github/codeql-ruby @xcorail +# ML-powered queries +/javascript/ql/experimental/adaptivethreatmodeling/ @github/codeql-ml-powered-queries-reviewers + # Notify members of codeql-go about PRs to the shared data-flow library files /java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl.qll @github/codeql-java @github/codeql-go /java/ql/src/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @github/codeql-java @github/codeql-go @@ -27,4 +30,4 @@ /docs/query-*-style-guide.md @github/codeql-analysis-reviewers # QL for QL reviewers -/ql/ @github/codeql-ql-for-ql-reviewers \ No newline at end of file +/ql/ @github/codeql-ql-for-ql-reviewers diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj index 9bf293c7e8d..dc1d945521b 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net6.0 false win-x64;linux-x64;osx-x64 enable diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj b/cpp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj index b9c3ec1abe9..e417622707a 100644 --- a/cpp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj +++ b/cpp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj @@ -1,7 +1,7 @@ - net5.0 + net6.0 Semmle.Autobuild.Cpp Semmle.Autobuild.Cpp diff --git a/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/old.dbscheme b/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/old.dbscheme new file mode 100644 index 00000000000..2cd420191e5 --- /dev/null +++ b/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/old.dbscheme @@ -0,0 +1,2095 @@ + +/** + * 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 +) + +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, + unique 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/2cd420191e5f782589b4e4efb70127de265390dd/semmlecode.cpp.dbscheme b/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..018f430097e --- /dev/null +++ b/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/semmlecode.cpp.dbscheme @@ -0,0 +1,2136 @@ + +/** + * 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 date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +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 +); + +/** + * 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 +) + +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, + unique 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/2cd420191e5f782589b4e4efb70127de265390dd/upgrade.properties b/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/upgrade.properties new file mode 100644 index 00000000000..ff1e5e7f2b2 --- /dev/null +++ b/cpp/downgrades/2cd420191e5f782589b4e4efb70127de265390dd/upgrade.properties @@ -0,0 +1,2 @@ +description: Remove unused legacy relations +compatibility: backwards diff --git a/cpp/downgrades/initial/semmlecode.cpp.dbscheme b/cpp/downgrades/initial/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..018f430097e --- /dev/null +++ b/cpp/downgrades/initial/semmlecode.cpp.dbscheme @@ -0,0 +1,2136 @@ + +/** + * 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 date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +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 +); + +/** + * 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 +) + +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, + unique 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/qlpack.yml b/cpp/downgrades/qlpack.yml new file mode 100644 index 00000000000..9155f820e7e --- /dev/null +++ b/cpp/downgrades/qlpack.yml @@ -0,0 +1,4 @@ +name: codeql/cpp-downgrades +groups: cpp +downgrades: . +library: true diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 061b9a94609..01d30a387ee 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,16 @@ +## 0.0.9 + +## 0.0.8 + +### Deprecated APIs + +* The `codeql/cpp-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/cpp-all` CodeQL pack. + +### Minor Analysis Improvements + +* `FormatLiteral::getMaxConvertedLength` now uses range analysis to provide a + more accurate length for integers formatted with `%x` + ## 0.0.7 ## 0.0.6 diff --git a/cpp/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md b/cpp/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md deleted file mode 100644 index 6ebf0d81141..00000000000 --- a/cpp/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* The `codeql/cpp-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/cpp-all` CodeQL pack. diff --git a/cpp/ql/lib/change-notes/2022-01-14-hex-format-range-analysis.md b/cpp/ql/lib/change-notes/2022-01-14-hex-format-range-analysis.md deleted file mode 100644 index a2adcf41ad4..00000000000 --- a/cpp/ql/lib/change-notes/2022-01-14-hex-format-range-analysis.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* `FormatLiteral::getMaxConvertedLength` now uses range analysis to provide a - more accurate length for integers formatted with `%x` \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/0.0.8.md b/cpp/ql/lib/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..4ff1205563f --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.0.8.md @@ -0,0 +1,10 @@ +## 0.0.8 + +### Deprecated APIs + +* The `codeql/cpp-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/cpp-all` CodeQL pack. + +### Minor Analysis Improvements + +* `FormatLiteral::getMaxConvertedLength` now uses range analysis to provide a + more accurate length for integers formatted with `%x` diff --git a/cpp/ql/lib/change-notes/released/0.0.9.md b/cpp/ql/lib/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..f39c05f9cd3 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.0.9.md @@ -0,0 +1,2 @@ +## 0.0.9 + diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index a2a5484910b..ecdd64fbab8 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.9 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 34c14fcd78c..4424055e172 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.0.8-dev +version: 0.0.10-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/commons/unix/Constants.qll b/cpp/ql/lib/semmle/code/cpp/commons/unix/Constants.qll index f9f854b1aab..98e0a13fb35 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/unix/Constants.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/unix/Constants.qll @@ -11,10 +11,10 @@ import cpp */ bindingset[input] int parseOctal(string input) { - input.charAt(0) = "0" and + input.regexpMatch("0[0-7]+") and result = strictsum(int ix | - ix in [0 .. input.length()] + ix in [1 .. input.length()] | 8.pow(input.length() - (ix + 1)) * input.charAt(ix).toInt() ) 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 5debcf7b178..50dcb8901ea 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -1290,7 +1290,7 @@ class DataFlowCallOption extends TDataFlowCallOption { } } -/** Content tagged with the type of a containing object. */ +/** A `Content` tagged with the type of a containing object. */ class TypedContent extends MkTypedContent { private Content c; private DataFlowType t; 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 c67374c3db9..ed3eadca08f 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll @@ -592,12 +592,14 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { * Holds if data flows from `source` to `sink` in zero or more local * (intra-procedural) steps. */ +pragma[inline] predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } /** * Holds if data can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } /** 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 76093b3d689..c2fe9815836 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowVar.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowVar.qll @@ -353,9 +353,9 @@ module FlowVar_internal { // indirection. result = def.getAUse(v) or - exists(SsaDefinition descendentDef | - this.getASuccessorSsaVar+() = TSsaVar(descendentDef, _) and - result = descendentDef.getAUse(v) + exists(SsaDefinition descendantDef | + this.getASuccessorSsaVar+() = TSsaVar(descendantDef, _) and + result = descendantDef.getAUse(v) ) ) or diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingUtil.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingUtil.qll index 5bc4d88c658..6fb13455286 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/TaintTrackingUtil.qll @@ -124,12 +124,14 @@ predicate localAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeT * Holds if taint may propagate from `source` to `sink` in zero or more local * (intra-procedural) steps. */ +pragma[inline] predicate localTaint(DataFlow::Node source, DataFlow::Node sink) { localTaintStep*(source, sink) } /** * Holds if taint can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprTaint(Expr e1, Expr e2) { localTaint(DataFlow::exprNode(e1), DataFlow::exprNode(e2)) } 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 5debcf7b178..50dcb8901ea 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 @@ -1290,7 +1290,7 @@ class DataFlowCallOption extends TDataFlowCallOption { } } -/** Content tagged with the type of a containing object. */ +/** A `Content` tagged with the type of a containing object. */ class TypedContent extends MkTypedContent { private Content c; private DataFlowType t; 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 582d397fead..75b530e937d 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 @@ -1032,12 +1032,14 @@ SideEffectInstruction getSideEffectFor(CallInstruction call, int argument) { * Holds if data flows from `source` to `sink` in zero or more local * (intra-procedural) steps. */ +pragma[inline] predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } /** * Holds if data can flow from `i1` to `i2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localInstructionFlow(Instruction e1, Instruction e2) { localFlow(instructionNode(e1), instructionNode(e2)) } @@ -1046,6 +1048,7 @@ predicate localInstructionFlow(Instruction e1, Instruction e2) { * Holds if data can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } private newtype TContent = diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll index b6b9a7243b2..1086701a97f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/TaintTrackingUtil.qll @@ -121,12 +121,14 @@ private predicate operandToInstructionTaintStep(Operand opFrom, Instruction inst * Holds if taint may propagate from `source` to `sink` in zero or more local * (intra-procedural) steps. */ +pragma[inline] predicate localTaint(DataFlow::Node source, DataFlow::Node sink) { localTaintStep*(source, sink) } /** * Holds if taint can flow from `i1` to `i2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localInstructionTaint(Instruction i1, Instruction i2) { localTaint(DataFlow::instructionNode(i1), DataFlow::instructionNode(i2)) } @@ -135,6 +137,7 @@ predicate localInstructionTaint(Instruction i1, Instruction i2) { * Holds if taint can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprTaint(Expr e1, Expr e2) { localTaint(DataFlow::exprNode(e1), DataFlow::exprNode(e2)) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index adc470c31a9..8034e9e2bd1 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -567,6 +567,13 @@ newtype TTranslatedElement = } or // The initialization of a base class from within a constructor. TTranslatedConstructorBaseInit(ConstructorBaseInit init) { not ignoreExpr(init) } or + // Workaround for a case where no base constructor is generated but a targetless base + // constructor call is present. + TTranslatedConstructorBareInit(ConstructorInit init) { + not ignoreExpr(init) and + not init instanceof ConstructorBaseInit and + not init instanceof ConstructorFieldInit + } or // The destruction of a base class from within a destructor. TTranslatedDestructorBaseDestruction(DestructorBaseDestruction destruction) { not ignoreExpr(destruction) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll index 2a0b58ce96a..2fa4548fc3c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll @@ -573,6 +573,11 @@ class TranslatedConstructorInitList extends TranslatedElement, InitializationCon baseInit = func.(Constructor).getInitializer(id) and result = getTranslatedConstructorBaseInit(baseInit) ) + or + exists(ConstructorInit bareInit | + bareInit = func.(Constructor).getInitializer(id) and + result = getTranslatedConstructorBareInit(bareInit) + ) } override Instruction getFirstInstruction() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll index 4b6538654db..23d6ad133cf 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll @@ -917,3 +917,36 @@ class TranslatedDestructorBaseDestruction extends TranslatedBaseStructorCall, final override string toString() { result = "destroy base: " + call.toString() } } + +/** + * A constructor base init call where no base constructor has been generated. + * + * Workaround for an extractor issue. + */ +class TranslatedConstructorBareInit extends TranslatedElement, TTranslatedConstructorBareInit { + ConstructorInit init; + + TranslatedConstructorBareInit() { this = TTranslatedConstructorBareInit(init) } + + override Locatable getAST() { result = init } + + final override string toString() { result = "construct base (no constructor)" } + + override Instruction getFirstInstruction() { result = getParent().getChildSuccessor(this) } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + none() + } + + override TranslatedElement getChild(int id) { none() } + + override Function getFunction() { result = getParent().getFunction() } + + override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } + + override Instruction getChildSuccessor(TranslatedElement child) { none() } +} + +TranslatedConstructorBareInit getTranslatedConstructorBareInit(ConstructorInit init) { + result.getAST() = init +} diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 018f430097e..2cd420191e5 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -135,52 +135,11 @@ externalData( string value : string ref ); -/** - * The date of the snapshot. - */ -snapshotDate(unique date snapshotDate : date ref); - /** * The source location of the snapshot. */ sourceLocationPrefix(string prefix : string ref); -/** - * Data used by the 'duplicate code' detection. - */ -duplicateCode( - unique int id : @duplication, - string relativePath : string ref, - int equivClass : int ref -); - -/** - * Data used by the 'similar code' detection. - */ -similarCode( - unique int id : @similarity, - string relativePath : string ref, - int equivClass : int ref -); - -/** - * Data used by the 'duplicate code' and 'similar code' detection. - */ -@duplication_or_similarity = @duplication | @similarity - -/** - * Data used by the 'duplicate code' and 'similar code' detection. - */ -#keyset[id, offset] -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 -); - /** * Information about packages that provide code used during compilation. * The `id` is just a unique identifier. diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index c9aaf043a7a..7a1f8d4d3a9 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -8,14 +8,6 @@ 65 -@duplication -185333 - - -@similarity -203173 - - @external_package 119 @@ -2612,17 +2604,6 @@ -snapshotDate -10 - - -snapshotDate -10 - - - - - sourceLocationPrefix 10 @@ -2634,2445 +2615,6 @@ -duplicateCode -185333 - - -id -185333 - - -relativePath -762 - - -equivClass -76600 - - - - -id -relativePath - - -12 - - -1 -2 -185333 - - - - - - -id -equivClass - - -12 - - -1 -2 -185333 - - - - - - -relativePath -id - - -12 - - -1 -2 -92 - - -2 -3 -233 - - -3 -4 -30 - - -4 -5 -73 - - -5 -6 -24 - - -6 -8 -67 - - -8 -12 -67 - - -12 -24 -67 - - -25 -53 -61 - - -59 -19902 -43 - - - - - - -relativePath -equivClass - - -12 - - -1 -2 -288 - - -2 -3 -129 - - -3 -4 -67 - - -4 -6 -61 - - -6 -10 -61 - - -10 -18 -67 - - -18 -97 -61 - - -102 -9128 -24 - - - - - - -equivClass -id - - -12 - - -1 -2 -20466 - - -2 -3 -32642 - - -3 -4 -10706 - - -4 -5 -6017 - - -5 -9 -5955 - - -9 -11 -811 - - - - - - -equivClass -relativePath - - -12 - - -1 -2 -75746 - - -2 -7 -854 - - - - - - - - -similarCode -203173 - - -id -203173 - - -relativePath -2161 - - -equivClass -54401 - - - - -id -relativePath - - -12 - - -1 -2 -203173 - - - - - - -id -equivClass - - -12 - - -1 -2 -203173 - - - - - - -relativePath -id - - -12 - - -1 -3 -199 - - -3 -6 -182 - - -6 -10 -177 - - -10 -15 -194 - - -15 -20 -188 - - -20 -26 -168 - - -26 -36 -175 - - -36 -50 -170 - - -50 -73 -170 - - -73 -116 -164 - - -116 -209 -164 - - -210 -763 -163 - - -765 -4804 -47 - - - - - - -relativePath -equivClass - - -12 - - -1 -2 -139 - - -2 -4 -198 - - -4 -7 -172 - - -7 -11 -173 - - -11 -16 -199 - - -16 -21 -177 - - -21 -29 -188 - - -29 -38 -169 - - -38 -52 -163 - - -52 -76 -166 - - -76 -122 -164 - - -122 -288 -163 - - -289 -1929 -90 - - - - - - -equivClass -id - - -12 - - -1 -2 -18 - - -2 -3 -22577 - - -3 -4 -10612 - - -4 -5 -6453 - - -5 -6 -4319 - - -6 -7 -3193 - - -7 -9 -4341 - - -9 -11 -2888 - - - - - - -equivClass -relativePath - - -12 - - -1 -2 -23073 - - -2 -3 -14749 - - -3 -4 -6633 - - -4 -5 -3652 - - -5 -8 -4985 - - -8 -11 -1309 - - - - - - - - -tokens -39609146 - - -id -279039 - - -offset -21173 - - -beginLine -785599 - - -beginColumn -1303 - - -endLine -785599 - - -endColumn -1315 - - - - -id -offset - - -12 - - -100 -101 -8573 - - -101 -102 -27596 - - -102 -105 -22642 - - -105 -108 -24492 - - -108 -111 -13755 - - -111 -114 -23816 - - -114 -116 -22655 - - -116 -124 -23663 - - -124 -132 -21647 - - -132 -154 -21388 - - -154 -186 -21296 - - -186 -202 -23423 - - -202 -416 -20940 - - -416 -3446 -3146 - - - - - - -id -beginLine - - -12 - - -4 -5 -1401 - - -5 -6 -109777 - - -6 -7 -15402 - - -7 -8 -28401 - - -8 -12 -23632 - - -12 -17 -22771 - - -17 -19 -18899 - - -19 -22 -22796 - - -22 -28 -21407 - - -28 -151 -14548 - - - - - - -id -beginColumn - - -12 - - -2 -26 -22900 - - -26 -31 -22323 - - -31 -32 -2642 - - -32 -33 -163606 - - -33 -51 -21198 - - -51 -61 -22439 - - -61 -80 -21063 - - -80 -132 -2864 - - - - - - -id -endLine - - -12 - - -4 -5 -1401 - - -5 -6 -109777 - - -6 -7 -15402 - - -7 -8 -28401 - - -8 -12 -23632 - - -12 -17 -22771 - - -17 -19 -18899 - - -19 -22 -22796 - - -22 -28 -21407 - - -28 -151 -14548 - - - - - - -id -endColumn - - -12 - - -2 -26 -21634 - - -26 -31 -24357 - - -31 -32 -1622 - - -32 -33 -163895 - - -33 -54 -21991 - - -54 -64 -22642 - - -64 -86 -21155 - - -86 -133 -1739 - - - - - - -offset -id - - -12 - - -2 -3 -4560 - - -4 -5 -1339 - - -6 -7 -2593 - - -8 -9 -823 - - -11 -12 -1610 - - -13 -23 -1856 - - -24 -62 -1622 - - -64 -130 -1647 - - -141 -250 -1598 - - -251 -982 -1591 - - -986 -45401 -1929 - - - - - - -offset -beginLine - - -12 - - -2 -3 -4560 - - -4 -5 -1339 - - -6 -7 -2593 - - -8 -9 -823 - - -11 -12 -1610 - - -13 -23 -1856 - - -24 -62 -1622 - - -64 -130 -1647 - - -141 -246 -1598 - - -247 -964 -1591 - - -969 -32533 -1591 - - -32544 -33826 -338 - - - - - - -offset -beginColumn - - -12 - - -1 -2 -5900 - - -2 -3 -3417 - - -3 -4 -1610 - - -4 -7 -1886 - - -7 -12 -1837 - - -12 -15 -1634 - - -15 -23 -1598 - - -23 -68 -1610 - - -68 -161 -1591 - - -161 -171 -86 - - - - - - -offset -endLine - - -12 - - -2 -3 -4560 - - -4 -5 -1339 - - -6 -7 -2593 - - -8 -9 -823 - - -11 -12 -1610 - - -13 -23 -1856 - - -24 -62 -1622 - - -64 -130 -1647 - - -141 -246 -1598 - - -247 -964 -1591 - - -969 -32533 -1591 - - -32544 -33826 -338 - - - - - - -offset -endColumn - - -12 - - -1 -2 -5900 - - -2 -3 -3417 - - -3 -4 -1610 - - -4 -7 -1911 - - -7 -12 -1825 - - -12 -15 -1610 - - -15 -24 -1659 - - -24 -73 -1610 - - -73 -167 -1598 - - -167 -177 -30 - - - - - - -beginLine -id - - -12 - - -1 -2 -404035 - - -2 -3 -103152 - - -3 -4 -44277 - - -4 -6 -70546 - - -6 -8 -58462 - - -8 -13 -65979 - - -13 -138 -39145 - - - - - - -beginLine -offset - - -12 - - -1 -7 -64824 - - -7 -12 -64326 - - -12 -23 -60140 - - -23 -32 -36686 - - -32 -33 -267324 - - -33 -41 -62703 - - -41 -55 -61370 - - -55 -69 -61566 - - -69 -94 -59182 - - -94 -248 -47473 - - - - - - -beginLine -beginColumn - - -12 - - -1 -5 -64418 - - -5 -9 -62667 - - -9 -15 -63048 - - -15 -29 -59864 - - -29 -32 -9225 - - -32 -33 -349370 - - -33 -37 -61837 - - -37 -42 -61548 - - -42 -122 -53619 - - - - - - -beginLine -endLine - - -12 - - -1 -2 -785599 - - - - - - -beginLine -endColumn - - -12 - - -1 -5 -64295 - - -5 -9 -62648 - - -9 -15 -63177 - - -15 -29 -59765 - - -29 -32 -9225 - - -32 -33 -350372 - - -33 -37 -63539 - - -37 -43 -65316 - - -43 -123 -47258 - - - - - - -beginColumn -id - - -12 - - -1 -12 -98 - - -13 -38 -98 - - -43 -61 -104 - - -62 -130 -98 - - -141 -305 -98 - - -315 -653 -98 - - -674 -1302 -98 - - -1398 -2753 -98 - - -3185 -7577 -98 - - -7757 -11920 -98 - - -12598 -15054 -98 - - -15171 -32371 -98 - - -33135 -40514 -98 - - -40724 -41481 -18 - - - - - - -beginColumn -offset - - -12 - - -1 -7 -98 - - -7 -26 -110 - - -26 -40 -98 - - -40 -63 -98 - - -65 -113 -98 - - -113 -158 -98 - - -158 -195 -98 - - -204 -254 -104 - - -264 -338 -98 - - -347 -412 -98 - - -414 -524 -98 - - -552 -824 -98 - - -835 -946 -98 - - -953 -954 -6 - - - - - - -beginColumn -beginLine - - -12 - - -1 -5 -98 - - -5 -13 -104 - - -13 -23 -98 - - -26 -49 -98 - - -50 -118 -98 - - -123 -282 -98 - - -294 -641 -98 - - -692 -1370 -98 - - -1484 -3836 -98 - - -3866 -8410 -98 - - -8518 -15220 -98 - - -15288 -94420 -98 - - -94493 -101674 -98 - - -102180 -104936 -18 - - - - - - -beginColumn -endLine - - -12 - - -1 -5 -98 - - -5 -13 -104 - - -13 -23 -98 - - -26 -49 -98 - - -50 -118 -98 - - -123 -282 -98 - - -294 -641 -98 - - -692 -1370 -98 - - -1484 -3836 -98 - - -3866 -8410 -98 - - -8518 -15220 -98 - - -15288 -94420 -98 - - -94493 -101674 -98 - - -102180 -104936 -18 - - - - - - -beginColumn -endColumn - - -12 - - -1 -2 -98 - - -2 -3 -98 - - -3 -5 -110 - - -5 -8 -98 - - -8 -12 -98 - - -12 -18 -110 - - -18 -23 -116 - - -23 -26 -116 - - -26 -32 -98 - - -32 -36 -92 - - -36 -39 -104 - - -39 -47 -98 - - -47 -67 -61 - - - - - - -endLine -id - - -12 - - -1 -2 -404035 - - -2 -3 -103152 - - -3 -4 -44277 - - -4 -6 -70546 - - -6 -8 -58462 - - -8 -13 -65979 - - -13 -138 -39145 - - - - - - -endLine -offset - - -12 - - -1 -7 -64824 - - -7 -12 -64326 - - -12 -23 -60140 - - -23 -32 -36686 - - -32 -33 -267324 - - -33 -41 -62703 - - -41 -55 -61370 - - -55 -69 -61566 - - -69 -94 -59182 - - -94 -248 -47473 - - - - - - -endLine -beginLine - - -12 - - -1 -2 -785599 - - - - - - -endLine -beginColumn - - -12 - - -1 -5 -64418 - - -5 -9 -62667 - - -9 -15 -63048 - - -15 -29 -59864 - - -29 -32 -9225 - - -32 -33 -349370 - - -33 -37 -61837 - - -37 -42 -61548 - - -42 -122 -53619 - - - - - - -endLine -endColumn - - -12 - - -1 -5 -64295 - - -5 -9 -62648 - - -9 -15 -63177 - - -15 -29 -59765 - - -29 -32 -9225 - - -32 -33 -350372 - - -33 -37 -63539 - - -37 -43 -65316 - - -43 -123 -47258 - - - - - - -endColumn -id - - -12 - - -1 -15 -104 - - -16 -42 -104 - - -45 -74 -104 - - -75 -164 -104 - - -166 -367 -104 - - -386 -925 -104 - - -925 -1772 -104 - - -1842 -4940 -104 - - -5240 -8774 -104 - - -9476 -14149 -104 - - -14219 -29080 -104 - - -29240 -36311 -104 - - -38281 -42409 -61 - - - - - - -endColumn -offset - - -12 - - -1 -9 -110 - - -10 -27 -104 - - -28 -42 -104 - - -42 -78 -104 - - -78 -120 -104 - - -124 -182 -104 - - -183 -224 -104 - - -227 -283 -104 - - -286 -370 -104 - - -375 -472 -104 - - -478 -794 -104 - - -798 -884 -104 - - -884 -918 -55 - - - - - - -endColumn -beginLine - - -12 - - -1 -6 -116 - - -6 -16 -116 - - -16 -32 -104 - - -33 -85 -104 - - -86 -189 -104 - - -224 -450 -104 - - -454 -931 -104 - - -1095 -2812 -104 - - -2907 -6953 -104 - - -7083 -12232 -104 - - -12400 -93251 -104 - - -93326 -98907 -104 - - -99642 -104238 -36 - - - - - - -endColumn -beginColumn - - -12 - - -1 -2 -55 - - -2 -3 -122 - - -3 -5 -110 - - -5 -8 -116 - - -8 -14 -116 - - -14 -19 -104 - - -19 -24 -116 - - -24 -29 -116 - - -29 -34 -104 - - -34 -36 -116 - - -36 -39 -110 - - -39 -42 -104 - - -42 -45 -18 - - - - - - -endColumn -endLine - - -12 - - -1 -6 -116 - - -6 -16 -116 - - -16 -32 -104 - - -33 -85 -104 - - -86 -189 -104 - - -224 -450 -104 - - -454 -931 -104 - - -1095 -2812 -104 - - -2907 -6953 -104 - - -7083 -12232 -104 - - -12400 -93251 -104 - - -93326 -98907 -104 - - -99642 -104238 -36 - - - - - - - - external_packages 119 diff --git a/cpp/ql/lib/tutorial.qll b/cpp/ql/lib/tutorial.qll index 8cb1797a532..190d054d5ac 100644 --- a/cpp/ql/lib/tutorial.qll +++ b/cpp/ql/lib/tutorial.qll @@ -6,122 +6,22 @@ */ class Person extends string { Person() { - this = "Ronil" or - this = "Dina" or - this = "Ravi" or - this = "Bruce" or - this = "Jo" or - this = "Aida" or - this = "Esme" or - this = "Charlie" or - this = "Fred" or - this = "Meera" or - this = "Maya" or - this = "Chad" or - this = "Tiana" or - this = "Laura" or - this = "George" or - this = "Will" or - this = "Mary" or - this = "Almira" or - this = "Susannah" or - this = "Rhoda" or - this = "Cynthia" or - this = "Eunice" or - this = "Olive" or - this = "Virginia" or - this = "Angeline" or - this = "Helen" or - this = "Cornelia" or - this = "Harriet" or - this = "Mahala" or - this = "Abby" or - this = "Margaret" or - this = "Deb" or - this = "Minerva" or - this = "Severus" or - this = "Lavina" or - this = "Adeline" or - this = "Cath" or - this = "Elisa" or - this = "Lucretia" or - this = "Anne" or - this = "Eleanor" or - this = "Joanna" or - this = "Adam" or - this = "Agnes" or - this = "Rosanna" or - this = "Clara" or - this = "Melissa" or - this = "Amy" or - this = "Isabel" or - this = "Jemima" or - this = "Cordelia" or - this = "Melinda" or - this = "Delila" or - this = "Jeremiah" or - this = "Elijah" or - this = "Hester" or - this = "Walter" or - this = "Oliver" or - this = "Hugh" or - this = "Aaron" or - this = "Reuben" or - this = "Eli" or - this = "Amos" or - this = "Augustus" or - this = "Theodore" or - this = "Ira" or - this = "Timothy" or - this = "Cyrus" or - this = "Horace" or - this = "Simon" or - this = "Asa" or - this = "Frank" or - this = "Nelson" or - this = "Leonard" or - this = "Harrison" or - this = "Anthony" or - this = "Louis" or - this = "Milton" or - this = "Noah" or - this = "Cornelius" or - this = "Abdul" or - this = "Warren" or - this = "Harvey" or - this = "Dennis" or - this = "Wesley" or - this = "Sylvester" or - this = "Gilbert" or - this = "Sullivan" or - this = "Edmund" or - this = "Wilson" or - this = "Perry" or - this = "Matthew" or - this = "Simba" or - this = "Nala" or - this = "Rafiki" or - this = "Shenzi" or - this = "Ernest" or - this = "Gertrude" or - this = "Oscar" or - this = "Lilian" or - this = "Raymond" or - this = "Elgar" or - this = "Elmer" or - this = "Herbert" or - this = "Maude" or - this = "Mae" or - this = "Otto" or - this = "Edwin" or - this = "Ophelia" or - this = "Parsley" or - this = "Sage" or - this = "Rosemary" or - this = "Thyme" or - this = "Garfunkel" or - this = "King Basil" or - this = "Stephen" + this = + [ + "Ronil", "Dina", "Ravi", "Bruce", "Jo", "Aida", "Esme", "Charlie", "Fred", "Meera", "Maya", + "Chad", "Tiana", "Laura", "George", "Will", "Mary", "Almira", "Susannah", "Rhoda", + "Cynthia", "Eunice", "Olive", "Virginia", "Angeline", "Helen", "Cornelia", "Harriet", + "Mahala", "Abby", "Margaret", "Deb", "Minerva", "Severus", "Lavina", "Adeline", "Cath", + "Elisa", "Lucretia", "Anne", "Eleanor", "Joanna", "Adam", "Agnes", "Rosanna", "Clara", + "Melissa", "Amy", "Isabel", "Jemima", "Cordelia", "Melinda", "Delila", "Jeremiah", "Elijah", + "Hester", "Walter", "Oliver", "Hugh", "Aaron", "Reuben", "Eli", "Amos", "Augustus", + "Theodore", "Ira", "Timothy", "Cyrus", "Horace", "Simon", "Asa", "Frank", "Nelson", + "Leonard", "Harrison", "Anthony", "Louis", "Milton", "Noah", "Cornelius", "Abdul", "Warren", + "Harvey", "Dennis", "Wesley", "Sylvester", "Gilbert", "Sullivan", "Edmund", "Wilson", + "Perry", "Matthew", "Simba", "Nala", "Rafiki", "Shenzi", "Ernest", "Gertrude", "Oscar", + "Lilian", "Raymond", "Elgar", "Elmer", "Herbert", "Maude", "Mae", "Otto", "Edwin", + "Ophelia", "Parsley", "Sage", "Rosemary", "Thyme", "Garfunkel", "King Basil", "Stephen" + ] } /** Gets the hair color of the person. If the person is bald, there is no result. */ @@ -936,25 +836,12 @@ class Person extends string { /** Holds if the person is deceased. */ predicate isDeceased() { - this = "Ernest" or - this = "Gertrude" or - this = "Oscar" or - this = "Lilian" or - this = "Edwin" or - this = "Raymond" or - this = "Elgar" or - this = "Elmer" or - this = "Herbert" or - this = "Maude" or - this = "Mae" or - this = "Otto" or - this = "Ophelia" or - this = "Parsley" or - this = "Sage" or - this = "Rosemary" or - this = "Thyme" or - this = "Garfunkel" or - this = "King Basil" + this = + [ + "Ernest", "Gertrude", "Oscar", "Lilian", "Edwin", "Raymond", "Elgar", "Elmer", "Herbert", + "Maude", "Mae", "Otto", "Ophelia", "Parsley", "Sage", "Rosemary", "Thyme", "Garfunkel", + "King Basil" + ] } /** Gets a parent of the person (alive or deceased). */ @@ -1195,12 +1082,7 @@ class Person extends string { } /** Holds if the person is allowed in the region. Initially, all villagers are allowed in every region. */ - predicate isAllowedIn(string region) { - region = "north" or - region = "south" or - region = "east" or - region = "west" - } + predicate isAllowedIn(string region) { region = ["north", "south", "east", "west"] } } /** Returns a parent of the person. */ diff --git a/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/old.dbscheme b/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/old.dbscheme new file mode 100644 index 00000000000..018f430097e --- /dev/null +++ b/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/old.dbscheme @@ -0,0 +1,2136 @@ + +/** + * 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 date of the snapshot. + */ +snapshotDate(unique date snapshotDate : date ref); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Data used by the 'duplicate code' detection. + */ +duplicateCode( + unique int id : @duplication, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'similar code' detection. + */ +similarCode( + unique int id : @similarity, + string relativePath : string ref, + int equivClass : int ref +); + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +@duplication_or_similarity = @duplication | @similarity + +/** + * Data used by the 'duplicate code' and 'similar code' detection. + */ +#keyset[id, offset] +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 +); + +/** + * 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 +) + +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, + unique 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/018f430097e80bcf4b2786c989dae94b7d82b819/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..2cd420191e5 --- /dev/null +++ b/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/semmlecode.cpp.dbscheme @@ -0,0 +1,2095 @@ + +/** + * 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 +) + +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, + unique 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/018f430097e80bcf4b2786c989dae94b7d82b819/upgrade.properties b/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/upgrade.properties new file mode 100644 index 00000000000..6956d073255 --- /dev/null +++ b/cpp/ql/lib/upgrades/018f430097e80bcf4b2786c989dae94b7d82b819/upgrade.properties @@ -0,0 +1,6 @@ +description: Remove unused legacy relations +compatibility: full +snapshotDate.rel: delete +duplicateCode.rel: delete +similarCode.rel: delete +tokens.rel: delete diff --git a/cpp/ql/lib/upgrades/initial/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/initial/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..454f1e15151 --- /dev/null +++ b/cpp/ql/lib/upgrades/initial/semmlecode.cpp.dbscheme @@ -0,0 +1,1111 @@ +/* + * External artifacts + */ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location_default ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location_default ref, + float value : float ref +); + +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); + +/* + * 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); + +/* + * Version history + */ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +) + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int churnedLines : int ref +) + +/* + * C++ dbscheme + */ + +@location = @location_stmt | @location_expr | @location_default ; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_stmt(unique int id: @location_stmt, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_expr(unique int id: @location_expr, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +@sourceline = @file | @function | @variable | @enumconstant; + +numlines(unique 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, + varchar(900) error_tag: string ref, + varchar(900) error_message: string ref, + int location: @location_default ref); + +/* + fromSource(0) = unknown, + fromSource(1) = from source, + fromSource(2) = from library +*/ +files(unique int id: @file, + varchar(900) name: string ref, + varchar(900) simple: string ref, + varchar(900) ext: string ref, + int fromSource: int ref); + +folders(unique int id: @folder, + varchar(900) name: string ref, + varchar(900) simple: string ref); + +@container = @folder | @file + +containerparent(int parent: @container ref, + unique int child: @container ref); + +fileannotations(int id: @file ref, + int kind: int ref, + varchar(900) name: string ref, + varchar(900) value: string ref); + +inmacroexpansion(int id: @element ref, + int inv: @macroinvocation ref); + +macroinvocations(unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default 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); + +/* + 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, + varchar(900) name: string ref, + int kind: int ref); + +function_return_type(int id: @function ref, int return_type: @type ref); + +purefunctions(unique int id: @function ref); + + + +fun_decls(unique int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + varchar(900) name: string ref, + int location: @location_default ref); +fun_def(unique int id: @fun_decl ref); +fun_decl_specifiers(int id: @fun_decl ref, + varchar(900) name: string ref) +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); + +var_decls(unique int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + varchar(900) name: string ref, + int location: @location_default ref); +var_def(unique int id: @var_decl ref); +var_decl_specifiers(int id: @var_decl ref, + varchar(900) name: string 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_specifiers(int id: @type_decl ref, + varchar(900) name: string 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 container: @element ref, + int location: @location_default ref); + +// each function has an ordered list of parameters +params(unique 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); + +membervariables(unique int id: @membervariable, + int type_id: @type ref, + varchar(900) name: string ref); + +properties(unique int id: @property, + int type_id: @type ref, + varchar(900) name: string ref, + int getter: @function ref); + +property_setter(int prop: @property ref, int setter: @function ref); +property_synthesis(int prop: @property ref, int ivar: @membervariable ref); +property_attribute(int prop: @property ref, int attr: @attribute ref); +property_decl_location(int prop: @property ref, int loc: @location_default ref); + +globalvariables(unique int id: @globalvariable, + int type_id: @type ref, + varchar(900) name: string ref); + +localvariables(unique int id: @localvariable, + int type_id: @type ref, + varchar(900) 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, + varchar(900) name: string ref, + int location: @location_default ref); + +@variable = @localvariable | @globalvariable | @membervariable | @parameter; + + +/* + Built-in types are the fundamental types, i.e., integral, floating, and void. + kind(1) = error, kind(2) = unknown, kind(3) = void, kind(4) = boolean, + kind(5) = char, kind(6) = unsigned char, kind(7) = signed char + kind(8) = short, kind(9) = unsigned short, kind(10) = signed short + kind(11) = int, kind(12) = unsigned int, kind(13) = signed int, + kind(14) = long, kind(15) = unsigned long, kind(16) = signed long, + kind(17) = long long, kind(18) = unsigned long long, kind(19) = signed long long, + kind(20) = __int8, kind(21) = __int16, kind(22) = __int32, kind(23) = __int64, // Microsoft specific + kind(24) = float, kind(25) = double, kind(26) = long double, + kind(27) = _Complex float, kind(28) = _Complex double, kind(29) = _Complex long double, //C99 specific + kind(30) = _Imaginary float, kind(31) = _Imaginary double, kind(32) = _Imaginary long double, //C99 specific + kind(33) = wchar_t, // MS specific + kind(34) = decltype(nullptr), // C++11 +*/ +builtintypes(unique int id: @builtintype, + varchar(900) name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref); + +pointersize(unique int size: 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 // ObjC + | 10 = block + ; +*/ +derivedtypes(unique int id: @derivedtype, + varchar(900) name: string ref, + int kind: int ref, + int type_id: @type 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); + +decltypes(unique 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 + | 6 = template + | 7 = template_parameter + | 8 = template_template_parameter + | 9 = proxy_class // a proxy class associated with a template parameter + | 10 = objc_class + | 11 = objc_protocol + | 12 = objc_category + ; +*/ +usertypes(unique int id: @usertype, + varchar(900) 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); + +is_class_template(unique int id: @usertype ref); +class_instantiation(unique 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); + +is_proxy_class_for(unique int id: @usertype ref, + unique int templ_param_id: @usertype 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); + +/* + 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 +*/ + +/* REMOVE +typerefs(unique int id: @typeref, + int type_id: @type ref); +*/ + +specifiers(unique int id: @specifier, + unique varchar(900) str: string ref); + +typespecifiers(int type_id: @type ref, + int spec_id: @specifier ref); + +/* REMOVE +typerefspecs(int type_ref_id: @typeref 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); + +@specifiable = /* REMOVE @typeref |*/ @type | @function | @variable | @enumconstant | @frienddecl; + +attributes(unique int id: @attribute, + int kind: int ref, + varchar(100) name: string ref, + varchar(100) 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 +; + +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, varchar(100) 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, varchar(100) 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; + +member(int parent: @type ref, + int index: int ref, + int child: @member ref); + +enclosingfunction(unique int child: @usertype 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); + +frienddecls(unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref); + +conforming_to_protocols(int type_id: @type ref, + int protocol: @usertype ref); + +@declaredtype = @usertype ; + +@declaration = @function | @declaredtype | @variable | @enumconstant | @frienddecl | @property; + +@member = @membervariable | @function | @declaredtype | @enumconstant | @property; + +@locatable = @diagnostic | @declaration | @ppd_include | @ppd_define | @macroinvocation /*| @funcall*/ | @xmllocatable | @attribute | @attribute_arg; + +@scope = @stmt | @function | @namedscope; +@namedscope = @namespace | @usertype; + +@element = @locatable | @file | @folder | @specifier | @type | @expr /* | @typeref */ | @namespace | @initialiser | @stmt | @derivation | @comment | @preprocdirect | @fun_decl | @var_decl | @type_decl | @namespace_decl | @using | @namequalifier | @specialnamequalifyingelement | @externalDefect | @externalMetric; + +@exprparent = @element; + +comments(unique int id: @comment, + varchar(900) contents: string ref, + int location: @location_default ref); + +commentbinding(unique int id: @comment ref, + int element: @element ref); + +exprconv(int converted: @expr ref, + unique int conversion: @expr ref); + +compgenerated(unique int id: @element ref); + + +namespaces(unique int id: @namespace, + varchar(900) name: string 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); + +/* +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 varchar(900) 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(unique int expr: @varbindexpr ref, + int var: @accessible ref); + +funbind(unique int expr: @funbindexpr ref, + int fun: @function ref); + +// the second field is a string representation of the value +// the third field is the actual text in the source or the same as the second field +values(unique int id: @value, + varchar(900) str: string ref, + varchar(900) text: string ref); + +valuebind(int val: @value ref, + unique int expr: @expr ref); + +objc_string(int lit: @literal 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); + +/* REMOVE +varrefbind(int var: @variable ref, + int expr: @varref ref); +*/ + +/* REMOVE +funrefbind(int fun: @function ref, + int expr: @funref 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); + +exprcontainers(int exp: @expr ref, + int container: @exprcontainer ref); + +@exprcontainer = @function | @variable | @enumconstant | @usertype; + +exprs(unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int location: @location_expr 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 // ObjC custom subscripting +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +| 75 = @msgexpr_normal // Objective C +| 76 = @msgexpr_super // Objective C +| 77 = @atselectorexpr // Objective C +| 78 = @atprotocolexpr // Objective C +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +| 83 = @atencodeexpr // Objective C +| 84 = @varaccess +| 85 = @thisaccess +| 86 = @objc_box_expr // Objective C +| 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) +// ... +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +// ... +| 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_desctructor ::= 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 +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +| 130 = @objc_array_literal +| 131 = @objc_dictionary_literal +// ... +| 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 +; + +@ctorinit = @ctordirectinit | @ctorvirtualinit | @ctorfieldinit | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct | @dtorvirtualdestruct | @dtorfielddestruct; + +@msgexpr = @msgexpr_normal | @msgexpr_super; +msgexpr_selector(unique int expr: @msgexpr ref, varchar(64) selector : string ref); +msgexpr_receiver_type(unique int expr: @msgexpr_normal ref, int receiver : @type ref); +msgexpr_for_property(unique int expr: @msgexpr_normal ref); + +atselectorexpr_selector(unique int expr: @atselectorexpr ref, varchar(64) selector : string ref); + +atprotocolexpr_protocol(unique int expr: @atprotocolexpr ref, int protocol : @usertype ref); + +atencodeexpr_type(unique int expr: @atencodeexpr ref, int the_type : @type ref); + +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); + +@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, + varchar(1) 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, + 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 | @msgexpr; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; +@callable = @function | @variable; // only for variables with routine types + + +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 // Objective C +| 31 = @stmt_objc_for_in // Objective C +| 32 = @stmt_at_synchronized // Objective C +; + +objc_for_in(unique int loop: @stmt_objc_for_in ref, + int collection: @expr ref, + int condition: @expr ref, + int body: @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); +isfinally(unique int block: @stmt_block ref); + +is_objc_try_stmt(unique int try: @stmt ref); +is_objc_throw(unique int throw: @throw_expr ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; +successors(int from: @cfgnode ref, + int to: @cfgnode ref); + +truecond(unique int from: @cfgnode ref, + int to: @cfgnode ref); + +falsecond(unique int from: @cfgnode ref, + int to: @cfgnode ref); + +stmtfunction(unique int stmt: @stmt ref, + int fun: @function ref); + +stmt_decl_bind(int stmt: @stmt_decl ref, + int decl: @declaration ref); + +@functionorblock = @function | @stmt_block; + +blockscope(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, + varchar(900) 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 end : @ppd_endif ref); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext(unique int id: @preprocdirect ref, + varchar(900) head: string ref, + varchar(900) body: string ref); + +includes(unique int id: @ppd_include ref, + int included: @file ref); + +/* Definitions and uses */ + +#computed +definitionUsePair( + int var : @variable ref, + int def : @cfgnode ref, + int use : @expr ref); + +#computed +definitionReaches( + int def : @cfgnode ref, + int node : @cfgnode ref); + +#computed +useUsePair( + int v : @variable ref, + int first : @expr ref, + int second : @expr ref); + +#computed +directUseUsePair( + int v : @variable ref, + int first : @expr ref, + int second : @expr ref); + +/* Nullness information */ + +#computed +nullCheckExpr( + int e : @expr ref, + int var : @variable ref); + +#computed +validCheckExpr( + int e : @expr ref, + int var : @variable ref); + +#computed +checkedNull( + int var : @variable ref, + int node : @cfgnode ref); + +#computed +checkedValid( + int var : @variable ref, + int node : @cfgnode ref); + +/* compilation dependencies taking #include directives into account */ + +#computed +fileDepends( + int src : @file ref, + int tgt : @file ref); + +/* XML Files */ + +xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref); + +xmlDTDs (unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref); + +xmlElements (unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs (unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs (int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) 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, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars (unique int id: @xmlcharacters, + varchar(3600) 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/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index cab85d12b8b..2a5e4775e18 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,36 @@ +## 0.0.9 + +### New Queries + +* Added a new query, `cpp/open-call-with-mode-argument`, to detect when `open` or `openat` is called with the `O_CREAT` or `O_TMPFILE` flag but when the `mode` argument is omitted. + +### Minor Analysis Improvements + +* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query has been further improved to reduce false positive results, and upgraded from `medium` to `high` precision. +* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query now finds more results, where a password is stored in a struct field or class member variable. +* The `cpp/cleartext-storage-file` query has been improved, removing false positives where data is written to a standard output stream. +* The `cpp/cleartext-storage-buffer` query has been updated to use the `semmle.code.cpp.dataflow.TaintTracking` library. +* The `cpp/world-writable-file-creation` query now only detects `open` and `openat` calls with the `O_CREAT` or `O_TMPFILE` flag. + +## 0.0.8 + +### New Queries + +* The `security` tag has been added to the `cpp/return-stack-allocated-memory` query. As a result, its results will now appear by default. +* The "Uncontrolled data in arithmetic expression" (cpp/uncontrolled-arithmetic) query has been enhanced to reduce false positive results and its @precision increased to high. +* A new `cpp/very-likely-overruning-write` query has been added to the default query suite for C/C++. The query reports some results that were formerly flagged by `cpp/overruning-write`. + +### Minor Analysis Improvements + +* Fix an issue with the `cpp/declaration-hides-variable` query where it would report variables that are unnamed in a database. +* The `cpp/cleartext-storage-file` query has been upgraded with non-local taint flow and has been converted to a `path-problem` query. +* The `cpp/return-stack-allocated-memory` query has been improved to produce fewer false positives. The + query has also been converted to a `path-problem` query. +* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query has been improved in several ways to reduce false positive results. +* The "Potential improper null termination" (`cpp/improper-null-termination`) query now produces fewer false positive results around control flow branches and loops. +* Added exception for GLib's gboolean to cpp/ambiguously-signed-bit-field. + This change reduces the number of false positives in the query. + ## 0.0.7 ## 0.0.6 diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql index e182dc84c91..c75fb8b639d 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -14,6 +14,9 @@ */ 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.DataFlow::DataFlow diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 70facd34598..8a9d4f9b991 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -5,7 +5,7 @@ * @kind path-problem * @problem.severity warning * @security-severity 7.5 - * @precision medium + * @precision high * @id cpp/cleartext-transmission * @tags security * external/cwe/cwe-319 @@ -14,8 +14,8 @@ import cpp import semmle.code.cpp.security.SensitiveExprs import semmle.code.cpp.dataflow.TaintTracking -import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.models.interfaces.FlowSource +import semmle.code.cpp.commons.File import DataFlow::PathGraph /** @@ -27,6 +27,7 @@ class SensitiveNode extends DataFlow::Node { this.asExpr() = any(SensitiveVariable sv).getInitializer().getExpr() or this.asExpr().(VariableAccess).getTarget() = any(SensitiveVariable sv).(GlobalOrNamespaceVariable) or + this.asExpr().(VariableAccess).getTarget() = any(SensitiveVariable v | v instanceof Field) or this.asUninitialized() instanceof SensitiveVariable or this.asParameter() instanceof SensitiveVariable or this.asExpr().(FunctionCall).getTarget() instanceof SensitiveFunction @@ -120,24 +121,32 @@ abstract class NetworkSendRecv extends FunctionCall { NetworkSendRecv() { this.getTarget() = target and // exclude calls based on the socket... - not exists(GVN g | - g = globalValueNumber(target.getSocketExpr(this)) and + not exists(DataFlow::Node src, DataFlow::Node dest | + DataFlow::localFlow(src, dest) and + dest.asExpr() = target.getSocketExpr(this) and ( // literal constant - globalValueNumber(any(Literal l)) = g + src.asExpr() instanceof Literal or // variable (such as a global) initialized to a literal constant exists(Variable v | v.getInitializer().getExpr() instanceof Literal and - g = globalValueNumber(v.getAnAccess()) + src.asExpr() = v.getAnAccess() ) or // result of a function call with literal inputs (likely constant) + forex(Expr arg | arg = src.asExpr().(FunctionCall).getAnArgument() | arg instanceof Literal) + or + // variable called `stdin`, `stdout` or `stderr` + src.asExpr().(VariableAccess).getTarget().getName() = ["stdin", "stdout", "stderr"] + or + // open of `"/dev/tty"` exists(FunctionCall fc | - forex(Expr arg | arg = fc.getAnArgument() | arg instanceof Literal) and - g = globalValueNumber(fc) + fopenCall(fc) and + fc.getAnArgument().getValue() = "/dev/tty" and + src.asExpr() = fc ) - // (this is far from exhaustive) + // (this is not exhaustive) ) ) } @@ -159,6 +168,16 @@ class NetworkRecv extends NetworkSendRecv { override Recv target; } +pragma[noinline] +predicate encryptionFunction(Function f) { + f.getName().toLowerCase().regexpMatch(".*(crypt|encode|decode|hash|securezero).*") +} + +pragma[noinline] +predicate encryptionType(UserType t) { + t.getName().toLowerCase().regexpMatch(".*(crypt|encode|decode|hash|securezero).*") +} + /** * An expression that is an argument or return value from an encryption / * decryption call. This is quite inclusive to minimize false positives, for @@ -168,10 +187,7 @@ class NetworkRecv extends NetworkSendRecv { class Encrypted extends Expr { Encrypted() { exists(FunctionCall fc | - fc.getTarget() - .getName() - .toLowerCase() - .regexpMatch(".*(crypt|encode|decode|hash|securezero).*") and + encryptionFunction(fc.getTarget()) and ( this = fc or this = fc.getAnArgument() @@ -180,7 +196,7 @@ class Encrypted extends Expr { or exists(Type t | this.getType().refersTo(t) and - t.getName().toLowerCase().regexpMatch(".*(crypt|encode|decode|hash|securezero).*") + encryptionType(t) ) } } diff --git a/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.ql b/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.ql index 1fd55a02d01..03666b42934 100644 --- a/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.ql +++ b/cpp/ql/src/Security/CWE/CWE-732/DoNotCreateWorldWritable.ql @@ -12,17 +12,16 @@ import cpp import FilePermissions -import semmle.code.cpp.commons.unix.Constants predicate worldWritableCreation(FileCreationExpr fc, int mode) { mode = localUmask(fc).mask(fc.getMode()) and - sets(mode, s_iwoth()) + setsAnyBits(mode, UnixConstants::s_iwoth()) } predicate setWorldWritable(FunctionCall fc, int mode) { fc.getTarget().getName() = ["chmod", "fchmod", "_chmod", "_wchmod"] and mode = fc.getArgument(1).getValue().toInt() and - sets(mode, s_iwoth()) + setsAnyBits(mode, UnixConstants::s_iwoth()) } from Expr fc, int mode, string message diff --git a/cpp/ql/src/Security/CWE/CWE-732/FilePermissions.qll b/cpp/ql/src/Security/CWE/CWE-732/FilePermissions.qll index ad5ed29098c..3c892428246 100644 --- a/cpp/ql/src/Security/CWE/CWE-732/FilePermissions.qll +++ b/cpp/ql/src/Security/CWE/CWE-732/FilePermissions.qll @@ -1,5 +1,49 @@ import cpp -import semmle.code.cpp.commons.unix.Constants +import semmle.code.cpp.commons.unix.Constants as UnixConstants + +/** + * Gets the number corresponding to the contents of `input` in base-16. + * Note: the first two characters of `input` must be `0x`. For example: + * `parseHex("0x123abc") = 1194684`. + */ +bindingset[input] +int parseHex(string input) { + exists(string lowerCaseInput | lowerCaseInput = input.toLowerCase() | + lowerCaseInput.regexpMatch("0x[0-9a-f]+") and + result = + strictsum(int ix | + ix in [2 .. input.length()] + | + 16.pow(input.length() - (ix + 1)) * "0123456789abcdef".indexOf(lowerCaseInput.charAt(ix)) + ) + ) +} + +/** + * Gets the value defined by the `O_CREAT` macro if the macro + * exists and if every definition defines the same value. + */ +int o_creat() { + result = + unique(int v | + exists(Macro m | m.getName() = "O_CREAT" | + v = parseHex(m.getBody()) or v = UnixConstants::parseOctal(m.getBody()) + ) + ) +} + +/** + * Gets the value defined by the `O_TMPFILE` macro if the macro + * exists and if every definition defines the same value. + */ +int o_tmpfile() { + result = + unique(int v | + exists(Macro m | m.getName() = "O_TMPFILE" | + v = parseHex(m.getBody()) or v = UnixConstants::parseOctal(m.getBody()) + ) + ) +} bindingset[n, digit] private string octalDigit(int n, int digit) { @@ -20,11 +64,17 @@ string octalFileMode(int mode) { else result = "[non-standard mode: decimal " + mode + "]" } +/** + * Holds if the bitmask `value` sets the bits in `flag`. + */ +bindingset[value, flag] +predicate setsFlag(int value, int flag) { value.bitAnd(flag) = flag } + /** * Holds if the bitmask `mask` sets any of the bit fields in `fields`. */ bindingset[mask, fields] -predicate sets(int mask, int fields) { mask.bitAnd(fields) != 0 } +predicate setsAnyBits(int mask, int fields) { mask.bitAnd(fields) != 0 } /** * Gets the value that `fc` sets the umask to, if `fc` is a call to @@ -83,16 +133,24 @@ abstract class FileCreationExpr extends FunctionCall { abstract int getMode(); } -class OpenCreationExpr extends FileCreationExpr { +abstract class FileCreationWithOptionalModeExpr extends FileCreationExpr { + abstract predicate hasModeArgument(); +} + +class OpenCreationExpr extends FileCreationWithOptionalModeExpr { OpenCreationExpr() { - this.getTarget().getName() = ["open", "_open", "_wopen"] and - sets(this.getArgument(1).getValue().toInt(), o_creat()) + this.getTarget().hasGlobalOrStdName(["open", "_open", "_wopen"]) and + exists(int flag | flag = this.getArgument(1).getValue().toInt() | + setsFlag(flag, o_creat()) or setsFlag(flag, o_tmpfile()) + ) } override Expr getPath() { result = this.getArgument(0) } + override predicate hasModeArgument() { exists(this.getArgument(2)) } + override int getMode() { - if exists(this.getArgument(2)) + if this.hasModeArgument() then result = this.getArgument(2).getValue().toInt() else // assume anything is permitted @@ -108,20 +166,35 @@ class CreatCreationExpr extends FileCreationExpr { override int getMode() { result = this.getArgument(1).getValue().toInt() } } -class OpenatCreationExpr extends FileCreationExpr { +class OpenatCreationExpr extends FileCreationWithOptionalModeExpr { OpenatCreationExpr() { - this.getTarget().getName() = "openat" and - this.getNumberOfArguments() = 4 + this.getTarget().hasGlobalOrStdName("openat") and + exists(int flag | flag = this.getArgument(2).getValue().toInt() | + setsFlag(flag, o_creat()) or setsFlag(flag, o_tmpfile()) + ) } override Expr getPath() { result = this.getArgument(1) } - override int getMode() { result = this.getArgument(3).getValue().toInt() } + override predicate hasModeArgument() { exists(this.getArgument(3)) } + + override int getMode() { + if this.hasModeArgument() + then result = this.getArgument(3).getValue().toInt() + else + // assume anything is permitted + result = 0.bitNot() + } } private int fopenMode() { result = - s_irusr().bitOr(s_irgrp()).bitOr(s_iroth()).bitOr(s_iwusr()).bitOr(s_iwgrp()).bitOr(s_iwoth()) + UnixConstants::s_irusr() + .bitOr(UnixConstants::s_irgrp()) + .bitOr(UnixConstants::s_iroth()) + .bitOr(UnixConstants::s_iwusr()) + .bitOr(UnixConstants::s_iwgrp()) + .bitOr(UnixConstants::s_iwoth()) } class FopenCreationExpr extends FileCreationExpr { @@ -153,6 +226,6 @@ class FopensCreationExpr extends FileCreationExpr { // fopen_s has restrictive permissions unless you have "u" in the mode if this.getArgument(2).getValue().charAt(_) = "u" then result = fopenMode() - else result = s_irusr().bitOr(s_iwusr()) + else result = UnixConstants::s_irusr().bitOr(UnixConstants::s_iwusr()) } } diff --git a/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.c b/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.c new file mode 100644 index 00000000000..d270d63e70b --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.c @@ -0,0 +1,9 @@ +int open_file_bad() { + // BAD - this uses arbitrary bytes from the stack as mode argument + return open(FILE, O_CREAT) +} + +int open_file_good() { + // GOOD - the mode argument is supplied + return open(FILE, O_CREAT, S_IRUSR | S_IWUSR) +} diff --git a/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.qhelp b/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.qhelp new file mode 100644 index 00000000000..e4be52e01b6 --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.qhelp @@ -0,0 +1,31 @@ + + + + +

+When opening a file with the O_CREAT or O_TMPFILE flag, the mode must +be supplied. If the mode argument is omitted, some arbitrary bytes from the stack will be used +as the file mode. This leaks some bits from the stack into the permissions of the file. +

+
+ + +

+The mode must be supplied when O_CREAT or O_TMPFILE is specified. +

+
+ + +

+The first example opens a file with the O_CREAT flag without supplying the mode +argument. In this case arbitrary bytes from the stack will be used as mode argument. The +second example correctly supplies the mode argument and creates a file that is user readable +and writable. +

+ + + +
+
diff --git a/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.ql b/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.ql new file mode 100644 index 00000000000..3ca6527e90d --- /dev/null +++ b/cpp/ql/src/Security/CWE/CWE-732/OpenCallMissingModeArgument.ql @@ -0,0 +1,19 @@ +/** + * @name File opened with O_CREAT flag but without mode argument + * @description Opening a file with the O_CREAT flag but without mode argument reads arbitrary bytes from the stack. + * @kind problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id cpp/open-call-with-mode-argument + * @tags security + * external/cwe/cwe-732 + */ + +import cpp +import FilePermissions + +from FileCreationWithOptionalModeExpr fc +where not fc.hasModeArgument() +select fc, + "A file is created here without providing a mode argument, which may leak bits from the stack." diff --git a/cpp/ql/src/change-notes/2021-12-14-overruning-write-split.md b/cpp/ql/src/change-notes/2021-12-14-overruning-write-split.md deleted file mode 100644 index bab10eaad3c..00000000000 --- a/cpp/ql/src/change-notes/2021-12-14-overruning-write-split.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* A new `cpp/very-likely-overruning-write` query has been added to the default query suite for C/C++. The query reports some results that were formerly flagged by `cpp/overruning-write`. diff --git a/cpp/ql/src/change-notes/2021-12-30-ambiguously-signed-bit-field.md b/cpp/ql/src/change-notes/2021-12-30-ambiguously-signed-bit-field.md deleted file mode 100644 index 520165eeeec..00000000000 --- a/cpp/ql/src/change-notes/2021-12-30-ambiguously-signed-bit-field.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added exception for GLib's gboolean to cpp/ambiguously-signed-bit-field. - This change reduces the number of false positives in the query. diff --git a/cpp/ql/src/change-notes/2022-01-05-promote-uncontrolled-arithmetic.md b/cpp/ql/src/change-notes/2022-01-05-promote-uncontrolled-arithmetic.md deleted file mode 100644 index b722527d8b2..00000000000 --- a/cpp/ql/src/change-notes/2022-01-05-promote-uncontrolled-arithmetic.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The "Uncontrolled data in arithmetic expression" (cpp/uncontrolled-arithmetic) query has been enhanced to reduce false positive results and its @precision increased to high. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2022-01-18-improper-null-termination.md b/cpp/ql/src/change-notes/2022-01-18-improper-null-termination.md deleted file mode 100644 index 19d5b950037..00000000000 --- a/cpp/ql/src/change-notes/2022-01-18-improper-null-termination.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Potential improper null termination" (`cpp/improper-null-termination`) query now produces fewer false positive results around control flow branches and loops. diff --git a/cpp/ql/src/change-notes/2022-01-19-cleartext-transmission.md b/cpp/ql/src/change-notes/2022-01-19-cleartext-transmission.md deleted file mode 100644 index 4d89ad2eeaf..00000000000 --- a/cpp/ql/src/change-notes/2022-01-19-cleartext-transmission.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query has been improved in several ways to reduce false positive results. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2022-01-20-return-stack-allocated-memory.md b/cpp/ql/src/change-notes/2022-01-20-return-stack-allocated-memory.md deleted file mode 100644 index ff51d88a94e..00000000000 --- a/cpp/ql/src/change-notes/2022-01-20-return-stack-allocated-memory.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/return-stack-allocated-memory` query has been improved to produce fewer false positives. The - query has also been converted to a `path-problem` query. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2022-01-24-cleartext-storage-file.md b/cpp/ql/src/change-notes/2022-01-24-cleartext-storage-file.md deleted file mode 100644 index a1ade7f231c..00000000000 --- a/cpp/ql/src/change-notes/2022-01-24-cleartext-storage-file.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/cleartext-storage-file` query has been upgraded with non-local taint flow and has been converted to a `path-problem` query. diff --git a/cpp/ql/src/change-notes/2022-01-24-return-stack-allocated-memory.md b/cpp/ql/src/change-notes/2022-01-24-return-stack-allocated-memory.md deleted file mode 100644 index ba1ff91a243..00000000000 --- a/cpp/ql/src/change-notes/2022-01-24-return-stack-allocated-memory.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The `security` tag has been added to the `cpp/return-stack-allocated-memory` query. As a result, its results will now appear by default. diff --git a/cpp/ql/src/change-notes/2022-01-25-cleartext-storage-buffer.md b/cpp/ql/src/change-notes/2022-01-25-cleartext-storage-buffer.md deleted file mode 100644 index 41bb848b918..00000000000 --- a/cpp/ql/src/change-notes/2022-01-25-cleartext-storage-buffer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/cleartext-storage-buffer` query has been updated to use the `semmle.code.cpp.dataflow.TaintTracking` library. diff --git a/cpp/ql/src/change-notes/2022-01-26-unnamed-variable-declaration-hiding.md b/cpp/ql/src/change-notes/2022-01-26-unnamed-variable-declaration-hiding.md deleted file mode 100644 index af64813fbcf..00000000000 --- a/cpp/ql/src/change-notes/2022-01-26-unnamed-variable-declaration-hiding.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fix an issue with the `cpp/declaration-hides-variable` query where it would report variables that are unnamed in a database. diff --git a/cpp/ql/src/change-notes/2022-01-28-cleartext-storage-file.md b/cpp/ql/src/change-notes/2022-01-28-cleartext-storage-file.md deleted file mode 100644 index 9290b476c42..00000000000 --- a/cpp/ql/src/change-notes/2022-01-28-cleartext-storage-file.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cpp/cleartext-storage-file` query has been improved, removing false positives where data is written to a standard output stream. diff --git a/cpp/ql/src/change-notes/2022-02-11-code-duplication.md b/cpp/ql/src/change-notes/2022-02-11-code-duplication.md new file mode 100644 index 00000000000..e9f676022b7 --- /dev/null +++ b/cpp/ql/src/change-notes/2022-02-11-code-duplication.md @@ -0,0 +1,4 @@ +--- +category: deprecated +--- +* The `CodeDuplication.Copy`, `CodeDuplication.DuplicateBlock`, and `CodeDuplication.SimilarBlock` classes have been deprecated. diff --git a/cpp/ql/src/change-notes/released/0.0.8.md b/cpp/ql/src/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..268d87d92a7 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.0.8.md @@ -0,0 +1,18 @@ +## 0.0.8 + +### New Queries + +* The `security` tag has been added to the `cpp/return-stack-allocated-memory` query. As a result, its results will now appear by default. +* The "Uncontrolled data in arithmetic expression" (cpp/uncontrolled-arithmetic) query has been enhanced to reduce false positive results and its @precision increased to high. +* A new `cpp/very-likely-overruning-write` query has been added to the default query suite for C/C++. The query reports some results that were formerly flagged by `cpp/overruning-write`. + +### Minor Analysis Improvements + +* Fix an issue with the `cpp/declaration-hides-variable` query where it would report variables that are unnamed in a database. +* The `cpp/cleartext-storage-file` query has been upgraded with non-local taint flow and has been converted to a `path-problem` query. +* The `cpp/return-stack-allocated-memory` query has been improved to produce fewer false positives. The + query has also been converted to a `path-problem` query. +* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query has been improved in several ways to reduce false positive results. +* The "Potential improper null termination" (`cpp/improper-null-termination`) query now produces fewer false positive results around control flow branches and loops. +* Added exception for GLib's gboolean to cpp/ambiguously-signed-bit-field. + This change reduces the number of false positives in the query. diff --git a/cpp/ql/src/change-notes/released/0.0.9.md b/cpp/ql/src/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..0774479c081 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.0.9.md @@ -0,0 +1,13 @@ +## 0.0.9 + +### New Queries + +* Added a new query, `cpp/open-call-with-mode-argument`, to detect when `open` or `openat` is called with the `O_CREAT` or `O_TMPFILE` flag but when the `mode` argument is omitted. + +### Minor Analysis Improvements + +* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query has been further improved to reduce false positive results, and upgraded from `medium` to `high` precision. +* The "Cleartext transmission of sensitive information" (`cpp/cleartext-transmission`) query now finds more results, where a password is stored in a struct field or class member variable. +* The `cpp/cleartext-storage-file` query has been improved, removing false positives where data is written to a standard output stream. +* The `cpp/cleartext-storage-buffer` query has been updated to use the `semmle.code.cpp.dataflow.TaintTracking` library. +* The `cpp/world-writable-file-creation` query now only detects `open` and `openat` calls with the `O_CREAT` or `O_TMPFILE` flag. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index a2a5484910b..ecdd64fbab8 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.9 diff --git a/cpp/ql/src/experimental/Best Practices/UselessTest.cpp b/cpp/ql/src/experimental/Best Practices/UselessTest.cpp new file mode 100644 index 00000000000..9e84f6fcbcb --- /dev/null +++ b/cpp/ql/src/experimental/Best Practices/UselessTest.cpp @@ -0,0 +1,9 @@ +void test(){ + int a = 8; + int b = 9; + + //Useless NonEquals + if(a==8 && a != 7) {} + + while(a==8 && a!=7){} +} diff --git a/cpp/ql/src/experimental/Best Practices/UselessTest.qhelp b/cpp/ql/src/experimental/Best Practices/UselessTest.qhelp new file mode 100644 index 00000000000..11d6adbc8bc --- /dev/null +++ b/cpp/ql/src/experimental/Best Practices/UselessTest.qhelp @@ -0,0 +1,18 @@ + + + + +

Comparison operations like a==8 && a!=7 contain a useless part : the non-equal part. This rule finds tests of this kind within an if or a while statement

+
+ + +

Remove the useless comparisons

+
+ + + + + +
diff --git a/cpp/ql/src/experimental/Best Practices/UselessTest.ql b/cpp/ql/src/experimental/Best Practices/UselessTest.ql new file mode 100644 index 00000000000..7d4286d22d7 --- /dev/null +++ b/cpp/ql/src/experimental/Best Practices/UselessTest.ql @@ -0,0 +1,45 @@ +/** + * @name Useless Test + * @description A boolean condition that is guaranteed to never be evaluated should be deleted. + * @kind problem + * @problem.severity warning + * @id cpp/uselesstest + * @tags reliability + * readability + */ + +import cpp +import semmle.code.cpp.valuenumbering.GlobalValueNumbering + +predicate sameExpr(Expr e1, Expr e2) { globalValueNumber(e1).getAnExpr() = e2 } + +Element nearestParent(Expr e) { + if + e.getParent().(Expr).getConversion*() instanceof ParenthesisExpr or + e.getParent() instanceof IfStmt or + e.getParent() instanceof WhileStmt + then result = e.getParent() + else result = nearestParent(e.getParent()) +} + +from LogicalAndExpr b, EQExpr eq, NEExpr ne +where + ( + b.getAChild*() = eq and + b.getAChild*() = ne and + eq.getParent() instanceof LogicalAndExpr and + ne.getParent() instanceof LogicalAndExpr + ) and + ( + eq.getLeftOperand() instanceof VariableAccess and ne.getLeftOperand() instanceof VariableAccess + or + eq.getLeftOperand() instanceof PointerDereferenceExpr and + ne.getLeftOperand() instanceof PointerDereferenceExpr + ) and + eq.getRightOperand() instanceof Literal and + ne.getRightOperand() instanceof Literal and + eq.getLeftOperand().getFullyConverted().getUnspecifiedType() = + ne.getLeftOperand().getFullyConverted().getUnspecifiedType() and + nearestParent(eq) = nearestParent(ne) and + sameExpr(eq.getLeftOperand(), ne.getLeftOperand()) +select ne, "Useless Test" diff --git a/cpp/ql/src/external/CodeDuplication.qll b/cpp/ql/src/external/CodeDuplication.qll index 2656378bf62..26fe883fc2f 100644 --- a/cpp/ql/src/external/CodeDuplication.qll +++ b/cpp/ql/src/external/CodeDuplication.qll @@ -2,59 +2,40 @@ import cpp -private string relativePath(File file) { result = file.getRelativePath().replaceAll("\\", "/") } - -cached -private predicate tokenLocation(string path, int sl, int sc, int ec, int el, Copy copy, int index) { - path = copy.sourceFile().getAbsolutePath() and - tokens(copy, index, sl, sc, ec, el) -} - -/** A token block used for detection of duplicate and similar code. */ -class Copy extends @duplication_or_similarity { - /** Gets the index of the last token in this block. */ - private int lastToken() { result = max(int i | tokens(this, i, _, _, _, _) | i) } +private newtype TDuplicationOrSimilarity = MKDuplicationOrSimilarity() +/** + * DEPRECATED: This class is no longer used. + * + * A token block used for detection of duplicate and similar code. + */ +class Copy extends TDuplicationOrSimilarity { /** Gets the index of the token in this block starting at the location `loc`, if any. */ - int tokenStartingAt(Location loc) { - exists(string filepath, int startline, int startcol | - loc.hasLocationInfo(filepath, startline, startcol, _, _) and - tokenLocation(filepath, startline, startcol, _, _, this, result) - ) - } + int tokenStartingAt(Location loc) { none() } /** Gets the index of the token in this block ending at the location `loc`, if any. */ - int tokenEndingAt(Location loc) { - exists(string filepath, int endline, int endcol | - loc.hasLocationInfo(filepath, _, _, endline, endcol) and - tokenLocation(filepath, _, _, endline, endcol, this, result) - ) - } + int tokenEndingAt(Location loc) { none() } /** Gets the line on which the first token in this block starts. */ - int sourceStartLine() { tokens(this, 0, result, _, _, _) } + int sourceStartLine() { none() } /** Gets the column on which the first token in this block starts. */ - int sourceStartColumn() { tokens(this, 0, _, result, _, _) } + int sourceStartColumn() { none() } /** Gets the line on which the last token in this block ends. */ - int sourceEndLine() { tokens(this, this.lastToken(), _, _, result, _) } + int sourceEndLine() { none() } /** Gets the column on which the last token in this block ends. */ - int sourceEndColumn() { tokens(this, this.lastToken(), _, _, _, result) } + int sourceEndColumn() { none() } /** Gets the number of lines containing at least (part of) one token in this block. */ int sourceLines() { result = this.sourceEndLine() + 1 - this.sourceStartLine() } /** Gets an opaque identifier for the equivalence class of this block. */ - int getEquivalenceClass() { duplicateCode(this, _, result) or similarCode(this, _, result) } + int getEquivalenceClass() { none() } /** Gets the source file in which this block appears. */ - File sourceFile() { - exists(string name | duplicateCode(this, name, _) or similarCode(this, name, _) | - name.replaceAll("\\", "/") = relativePath(result) - ) - } + File sourceFile() { none() } /** * Holds if this element is at the specified location. @@ -77,15 +58,23 @@ class Copy extends @duplication_or_similarity { string toString() { none() } } -/** A block of duplicated code. */ -class DuplicateBlock extends Copy, @duplication { +/** + * DEPRECATED: This class is no longer used. + * + * A block of duplicated code. + */ +class DuplicateBlock extends Copy { override string toString() { result = "Duplicate code: " + this.sourceLines() + " duplicated lines." } } -/** A block of similar code. */ -class SimilarBlock extends Copy, @similarity { +/** + * DEPRECATED: This class is no longer used. + * + * A block of similar code. + */ +class SimilarBlock extends Copy { override string toString() { result = "Similar code: " + this.sourceLines() + " almost duplicated lines." } diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index decaebac952..ca4d832566f 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.0.8-dev +version: 0.0.10-dev groups: - cpp - queries diff --git a/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll b/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll index 52a790cca28..7d605a491ee 100644 --- a/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll +++ b/cpp/ql/test/TestUtilities/InlineExpectationsTest.qll @@ -93,7 +93,7 @@ private import InlineExpectationsTestPrivate /** - * Base class for tests with inline expectations. The test extends this class to provide the actual + * The base class for tests with inline expectations. The test extends this class to provide the actual * results of the query, which are then compared with the expected results in comments to produce a * list of failure messages that point out where the actual results differ from the expected * results. @@ -123,6 +123,15 @@ abstract class InlineExpectationsTest extends string { */ abstract predicate hasActualResult(Location location, string element, string tag, string value); + /** + * Like `hasActualResult`, but returns results that do not require a matching annotation. + * A failure will still arise if there is an annotation that does not match any results, but not vice versa. + * Override this predicate to specify optional results. + */ + predicate hasOptionalResult(Location location, string element, string tag, string value) { + none() + } + final predicate hasFailureMessage(FailureLocatable element, string message) { exists(ActualResult actualResult | actualResult.getTest() = this and @@ -134,7 +143,8 @@ abstract class InlineExpectationsTest extends string { ) or not exists(ValidExpectation expectation | expectation.matchesActualResult(actualResult)) and - message = "Unexpected result: " + actualResult.getExpectationText() + message = "Unexpected result: " + actualResult.getExpectationText() and + not actualResult.isOptional() ) ) or @@ -243,9 +253,13 @@ private string expectationPattern() { private newtype TFailureLocatable = TActualResult( - InlineExpectationsTest test, Location location, string element, string tag, string value + InlineExpectationsTest test, Location location, string element, string tag, string value, + boolean optional ) { - test.hasActualResult(location, element, tag, value) + test.hasActualResult(location, element, tag, value) and + optional = false + or + test.hasOptionalResult(location, element, tag, value) and optional = true } or TValidExpectation(ExpectationComment comment, string tag, string value, string knownFailure) { exists(TColumn column, string tags | @@ -277,8 +291,9 @@ class ActualResult extends FailureLocatable, TActualResult { string element; string tag; string value; + boolean optional; - ActualResult() { this = TActualResult(test, location, element, tag, value) } + ActualResult() { this = TActualResult(test, location, element, tag, value, optional) } override string toString() { result = element } @@ -289,6 +304,8 @@ class ActualResult extends FailureLocatable, TActualResult { override string getTag() { result = tag } override string getValue() { result = value } + + predicate isOptional() { optional = true } } abstract private class Expectation extends FailureLocatable { diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index faff86c0081..e50b02f0be8 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -11332,6 +11332,64 @@ ir.cpp: # 1447| Type = [Struct] POD_Derived # 1447| ValueCategory = prvalue # 1448| getStmt(4): [ReturnStmt] return ... +# 1450| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) +# 1450| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Inheritance_Test_B & +# 1450| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() +# 1450| : +# 1451| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() +# 1451| : +# 1451| getEntryPoint(): [BlockStmt] { ... } +# 1451| getStmt(0): [ReturnStmt] return ... +# 1451| : +# 1454| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) +# 1454| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Inheritance_Test_A & +# 1454| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) +# 1454| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] Inheritance_Test_A && +# 1454| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) +# 1454| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Inheritance_Test_A & +# 1454| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) +# 1454| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] Inheritance_Test_A && +# 1454| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() +# 1454| : +# 1457| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() +# 1457| : +# 1457| : +# 1457| getInitializer(0): (no string representation) +# 1457| Type = [Struct] Inheritance_Test_B +# 1457| ValueCategory = prvalue +# 1457| getInitializer(1): [ConstructorFieldInit] constructor init of field x +# 1457| Type = [IntType] int +# 1457| ValueCategory = prvalue +# 1457| getExpr(): [Literal] 42 +# 1457| Type = [IntType] int +# 1457| Value = [Literal] 42 +# 1457| ValueCategory = prvalue +# 1457| getEntryPoint(): [BlockStmt] { ... } +# 1458| getStmt(0): [ExprStmt] ExprStmt +# 1458| getExpr(): [AssignExpr] ... = ... +# 1458| Type = [IntType] int +# 1458| ValueCategory = lvalue +# 1458| getLValue(): [PointerFieldAccess] y +# 1458| Type = [IntType] int +# 1458| ValueCategory = lvalue +# 1458| getQualifier(): [ThisExpr] this +# 1458| Type = [PointerType] Inheritance_Test_A * +# 1458| ValueCategory = prvalue(load) +# 1458| getRValue(): [Literal] 3 +# 1458| Type = [IntType] int +# 1458| Value = [Literal] 3 +# 1458| ValueCategory = prvalue +# 1459| getStmt(1): [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 9e52504441c..9eb79f3c574 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1447,4 +1447,15 @@ void temporary_hierarchy() { float f = (returnValue()).f(); } +struct Inheritance_Test_B { + ~Inheritance_Test_B() {} +}; + +struct Inheritance_Test_A : public Inheritance_Test_B { + int x; + int y; + Inheritance_Test_A() : x(42) { + y = 3; + } +}; // 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 ba6950b5e2f..37230e65109 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -6626,6 +6626,36 @@ | ir.cpp:1447:44:1447:44 | ChiTotal | total:m1447_5 | | ir.cpp:1447:44:1447:44 | SideEffect | ~m1447_5 | | ir.cpp:1447:44:1447:44 | StoreValue | r1447_8 | +| ir.cpp:1451:3:1451:21 | Address | &:r1451_5 | +| ir.cpp:1451:3:1451:21 | Address | &:r1451_5 | +| ir.cpp:1451:3:1451:21 | Address | &:r1451_7 | +| ir.cpp:1451:3:1451:21 | Address | &:r1451_7 | +| ir.cpp:1451:3:1451:21 | ChiPartial | partial:m1451_3 | +| ir.cpp:1451:3:1451:21 | ChiTotal | total:m1451_2 | +| ir.cpp:1451:3:1451:21 | Load | m1451_6 | +| ir.cpp:1451:3:1451:21 | SideEffect | m1451_3 | +| ir.cpp:1451:3:1451:21 | SideEffect | m1451_8 | +| ir.cpp:1457:3:1457:20 | Address | &:r1457_5 | +| ir.cpp:1457:3:1457:20 | Address | &:r1457_5 | +| ir.cpp:1457:3:1457:20 | Address | &:r1457_7 | +| ir.cpp:1457:3:1457:20 | Address | &:r1457_7 | +| ir.cpp:1457:3:1457:20 | ChiPartial | partial:m1457_3 | +| ir.cpp:1457:3:1457:20 | ChiTotal | total:m1457_2 | +| ir.cpp:1457:3:1457:20 | Load | m1457_6 | +| ir.cpp:1457:3:1457:20 | SideEffect | m1457_3 | +| ir.cpp:1457:3:1457:20 | SideEffect | m1458_6 | +| ir.cpp:1457:3:1457:20 | Unary | m1457_6 | +| ir.cpp:1457:26:1457:30 | Address | &:r1457_9 | +| ir.cpp:1457:26:1457:30 | ChiPartial | partial:m1457_11 | +| ir.cpp:1457:26:1457:30 | ChiTotal | total:m1457_8 | +| ir.cpp:1457:26:1457:30 | StoreValue | r1457_10 | +| ir.cpp:1458:5:1458:5 | Address | &:r1458_2 | +| ir.cpp:1458:5:1458:5 | Address | &:r1458_4 | +| ir.cpp:1458:5:1458:5 | Load | m1457_6 | +| ir.cpp:1458:5:1458:5 | Unary | r1458_3 | +| ir.cpp:1458:5:1458:9 | ChiPartial | partial:m1458_5 | +| ir.cpp:1458:5:1458:9 | ChiTotal | total:m1457_12 | +| ir.cpp:1458:9:1458:9 | StoreValue | r1458_1 | | 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 817a8f68cf7..22430f7321e 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -7858,6 +7858,44 @@ ir.cpp: # 1443| v1443_5(void) = AliasedUse : ~m? # 1443| v1443_6(void) = ExitFunction : +# 1451| void Inheritance_Test_B::~Inheritance_Test_B() +# 1451| Block 0 +# 1451| v1451_1(void) = EnterFunction : +# 1451| mu1451_2(unknown) = AliasedDefinition : +# 1451| mu1451_3(unknown) = InitializeNonLocal : +# 1451| r1451_4(glval) = VariableAddress[#this] : +# 1451| mu1451_5(glval) = InitializeParameter[#this] : &:r1451_4 +# 1451| r1451_6(glval) = Load[#this] : &:r1451_4, ~m? +# 1451| mu1451_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1451_6 +# 1451| v1451_8(void) = NoOp : +# 1451| v1451_9(void) = ReturnIndirection[#this] : &:r1451_6, ~m? +# 1451| v1451_10(void) = ReturnVoid : +# 1451| v1451_11(void) = AliasedUse : ~m? +# 1451| v1451_12(void) = ExitFunction : + +# 1457| void Inheritance_Test_A::Inheritance_Test_A() +# 1457| Block 0 +# 1457| v1457_1(void) = EnterFunction : +# 1457| mu1457_2(unknown) = AliasedDefinition : +# 1457| mu1457_3(unknown) = InitializeNonLocal : +# 1457| r1457_4(glval) = VariableAddress[#this] : +# 1457| mu1457_5(glval) = InitializeParameter[#this] : &:r1457_4 +# 1457| r1457_6(glval) = Load[#this] : &:r1457_4, ~m? +# 1457| mu1457_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1457_6 +# 1457| r1457_8(glval) = FieldAddress[x] : mu1457_5 +# 1457| r1457_9(int) = Constant[42] : +# 1457| mu1457_10(int) = Store[?] : &:r1457_8, r1457_9 +# 1458| r1458_1(int) = Constant[3] : +# 1458| r1458_2(glval) = VariableAddress[#this] : +# 1458| r1458_3(Inheritance_Test_A *) = Load[#this] : &:r1458_2, ~m? +# 1458| r1458_4(glval) = FieldAddress[y] : r1458_3 +# 1458| mu1458_5(int) = Store[?] : &:r1458_4, r1458_1 +# 1459| v1459_1(void) = NoOp : +# 1457| v1457_11(void) = ReturnIndirection[#this] : &:r1457_6, ~m? +# 1457| v1457_12(void) = ReturnVoid : +# 1457| v1457_13(void) = AliasedUse : ~m? +# 1457| v1457_14(void) = ExitFunction : + perf-regression.cpp: # 6| void Big::Big() # 6| Block 0 diff --git a/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/DeclarationHidesVariable.expected b/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/DeclarationHidesVariable.expected index a58ba2305dd..d9b025639f0 100644 --- a/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/DeclarationHidesVariable.expected +++ b/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/DeclarationHidesVariable.expected @@ -1,2 +1,3 @@ | hiding.cpp:6:17:6:17 | i | Variable i hides another variable of the same name (on $@). | hiding.cpp:4:13:4:13 | i | line 4 | | hiding.cpp:18:15:18:15 | k | Variable k hides another variable of the same name (on $@). | hiding.cpp:15:11:15:11 | k | line 15 | +| hiding.cpp:38:11:38:11 | x | Variable x hides another variable of the same name (on $@). | hiding.cpp:36:9:36:9 | x | line 36 | diff --git a/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/hiding.cpp b/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/hiding.cpp index aed4eef2465..3a96933db7d 100644 --- a/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/hiding.cpp +++ b/cpp/ql/test/query-tests/Best Practices/Hiding/DeclarationHidesVariable/hiding.cpp @@ -35,7 +35,7 @@ void structuredBinding() { int xs[1] = {1}; auto [x] = xs; { - auto [x] = xs; // BAD [NOT DETECTED] + auto [x] = xs; // BAD auto [y] = xs; // GOOD } } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected index 02d2773348c..a63099bb875 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected @@ -1,4 +1,5 @@ edges +| test2.cpp:63:24:63:31 | password | test2.cpp:63:16:63:20 | call to crypt | | test3.cpp:17:28:17:36 | password1 | test3.cpp:22:15:22:23 | password1 | | test3.cpp:17:51:17:59 | password2 | test3.cpp:26:15:26:23 | password2 | | test3.cpp:45:8:45:15 | password | test3.cpp:47:15:47:22 | password | @@ -89,11 +90,16 @@ edges | test3.cpp:398:18:398:25 | password | test3.cpp:400:15:400:23 | & ... | | test3.cpp:398:18:398:25 | password | test3.cpp:400:16:400:23 | password | | test3.cpp:398:18:398:25 | password | test3.cpp:400:33:400:40 | password | +| test3.cpp:421:21:421:28 | password | test3.cpp:421:3:421:17 | call to decrypt_inplace | +| test3.cpp:429:7:429:14 | password | test3.cpp:431:8:431:15 | password | | test.cpp:41:23:41:43 | cleartext password! | test.cpp:48:21:48:27 | call to encrypt | | test.cpp:41:23:41:43 | cleartext password! | test.cpp:48:29:48:39 | thePassword | | test.cpp:66:23:66:43 | cleartext password! | test.cpp:76:21:76:27 | call to encrypt | | test.cpp:66:23:66:43 | cleartext password! | test.cpp:76:29:76:39 | thePassword | nodes +| test2.cpp:63:16:63:20 | call to crypt | semmle.label | call to crypt | +| test2.cpp:63:24:63:31 | password | semmle.label | password | +| test2.cpp:63:24:63:31 | password | semmle.label | password | | test3.cpp:17:28:17:36 | password1 | semmle.label | password1 | | test3.cpp:17:51:17:59 | password2 | semmle.label | password2 | | test3.cpp:22:15:22:23 | password1 | semmle.label | password1 | @@ -208,6 +214,13 @@ nodes | test3.cpp:400:15:400:23 | & ... | semmle.label | & ... | | test3.cpp:400:16:400:23 | password | semmle.label | password | | test3.cpp:400:33:400:40 | password | semmle.label | password | +| test3.cpp:414:17:414:24 | password | semmle.label | password | +| test3.cpp:420:17:420:24 | password | semmle.label | password | +| test3.cpp:421:3:421:17 | call to decrypt_inplace | semmle.label | call to decrypt_inplace | +| test3.cpp:421:21:421:28 | password | semmle.label | password | +| test3.cpp:421:21:421:28 | password | semmle.label | password | +| test3.cpp:429:7:429:14 | password | semmle.label | password | +| test3.cpp:431:8:431:15 | password | semmle.label | password | | test.cpp:41:23:41:43 | cleartext password! | semmle.label | cleartext password! | | test.cpp:48:21:48:27 | call to encrypt | semmle.label | call to encrypt | | test.cpp:48:29:48:39 | thePassword | semmle.label | thePassword | @@ -238,3 +251,6 @@ subpaths | test3.cpp:300:2:300:5 | call to send | test3.cpp:308:58:308:66 | password2 | test3.cpp:300:14:300:17 | data | This operation transmits 'data', which may contain unencrypted sensitive data from $@ | test3.cpp:308:58:308:66 | password2 | password2 | | test3.cpp:341:4:341:7 | call to recv | test3.cpp:339:9:339:16 | password | test3.cpp:341:16:341:23 | password | This operation receives into 'password', which may put unencrypted sensitive data into $@ | test3.cpp:339:9:339:16 | password | password | | test3.cpp:388:3:388:6 | call to recv | test3.cpp:386:8:386:15 | password | test3.cpp:388:15:388:22 | password | This operation receives into 'password', which may put unencrypted sensitive data into $@ | test3.cpp:386:8:386:15 | password | password | +| test3.cpp:414:3:414:6 | call to recv | test3.cpp:414:17:414:24 | password | test3.cpp:414:17:414:24 | password | This operation receives into 'password', which may put unencrypted sensitive data into $@ | test3.cpp:414:17:414:24 | password | password | +| test3.cpp:420:3:420:6 | call to recv | test3.cpp:420:17:420:24 | password | test3.cpp:420:17:420:24 | password | This operation receives into 'password', which may put unencrypted sensitive data into $@ | test3.cpp:420:17:420:24 | password | password | +| test3.cpp:431:2:431:6 | call to fgets | test3.cpp:429:7:429:14 | password | test3.cpp:431:8:431:15 | password | This operation receives into 'password', which may put unencrypted sensitive data into $@ | test3.cpp:429:7:429:14 | password | password | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/test3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/test3.cpp index bac96324554..f54d2a09e8d 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/test3.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/test3.cpp @@ -411,13 +411,66 @@ void test_member_password() { packet p; - recv(val(), p.password, 256, val()); // BAD: not encrypted [NOT DETECTED] + recv(val(), p.password, 256, val()); // BAD: not encrypted } { packet p; - recv(val(), p.password, 256, val()); // GOOD: password is encrypted + recv(val(), p.password, 256, val()); // GOOD: password is encrypted [FALSE POSITIVE] decrypt_inplace(p.password); // proof that `password` was in fact encrypted } } + +extern FILE *stdin; + +void test_stdin_param(FILE *stream) +{ + char password[128]; + + fgets(password, 128, stream); // GOOD: from standard input (see call below) [FALSE POSITIVE] +} + +void test_stdin() +{ + char password[128]; + FILE *f = stdin; + + fgets(password, 128, stdin); // GOOD: from standard input + fgets(password, 128, f); // GOOD: from standard input + test_stdin_param(stdin); +} + +int open(const char *filename, int b); + +void test_tty() +{ + { + char password[256]; + int f; + + f = open("/dev/tty", val()); + recv(f, password, 256, val()); // GOOD: from terminal + } + + { + char password[256]; + int f; + + f = STDIN_FILENO; + recv(f, password, 256, val()); // GOOD: from stdin + } + + { + char password[256]; + int f; + + f = open("/dev/tty", val()); + if (f == -1) + { + f = STDIN_FILENO; + } + + recv(f, password, 256, val()); // GOOD: from terminal or stdin + } +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.c b/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.c new file mode 100644 index 00000000000..61243f3db1a --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.c @@ -0,0 +1,29 @@ +typedef unsigned int mode_t; + +#define O_RDWR 0x0002 +#define O_CLOEXEC 0x0040 +#define O_NONBLOCK 0x0080 +#define O_CREAT 0x0200 +#define O_APPEND 0x0800 +#define O_TMPFILE 0x2000 + +int open(const char *pathname, int flags, ...); + +int openat(int dirfd, const char *pathname, int flags, ...); + +const char *a_file = "/a_file"; + +void test_open() { + open(a_file, O_NONBLOCK); // GOOD + open(a_file, O_RDWR | O_CLOEXEC); // GOOD + open(a_file, O_APPEND); // GOOD + open(a_file, O_CREAT); // BAD + open(a_file, O_CREAT, 0); // GOOD + open(a_file, O_TMPFILE); // BAD + open(a_file, O_TMPFILE, 0); // GOOD + openat(0, a_file, O_APPEND); // GOOD + openat(0, a_file, O_CREAT); // BAD + openat(0, a_file, O_CREAT, 0); // GOOD + openat(0, a_file, O_TMPFILE); // BAD + openat(0, a_file, O_TMPFILE, 0); // GOOD +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.expected new file mode 100644 index 00000000000..f7fded26fa0 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.expected @@ -0,0 +1,4 @@ +| OpenCallMissingModeArgument.c:20:3:20:6 | call to open | A file is created here without providing a mode argument, which may leak bits from the stack. | +| OpenCallMissingModeArgument.c:22:3:22:6 | call to open | A file is created here without providing a mode argument, which may leak bits from the stack. | +| OpenCallMissingModeArgument.c:25:3:25:8 | call to openat | A file is created here without providing a mode argument, which may leak bits from the stack. | +| OpenCallMissingModeArgument.c:27:3:27:8 | call to openat | A file is created here without providing a mode argument, which may leak bits from the stack. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.qlref new file mode 100644 index 00000000000..68198ec2a3b --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-732/OpenCallMissingModeArgument.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-732/OpenCallMissingModeArgument.ql \ No newline at end of file diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj index b93957776d8..a91868fbd80 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 false win-x64;linux-x64;osx-x64 enable diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj b/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj index fe9116e40b8..4f712a651d4 100644 --- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj +++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 Semmle.Autobuild.CSharp Semmle.Autobuild.CSharp diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj b/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj index 202189e725e..d3e24dd6ad5 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 Semmle.Autobuild.Shared Semmle.Autobuild.Shared false diff --git a/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/old.dbscheme b/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/old.dbscheme new file mode 100644 index 00000000000..4b9c288ece4 --- /dev/null +++ b/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/old.dbscheme @@ -0,0 +1,2058 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/semmlecode.csharp.dbscheme b/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..ab09ac82875 --- /dev/null +++ b/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/semmlecode.csharp.dbscheme @@ -0,0 +1,2054 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/upgrade.properties b/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/upgrade.properties new file mode 100644 index 00000000000..e194d561fab --- /dev/null +++ b/csharp/downgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/upgrade.properties @@ -0,0 +1,3 @@ +description: Remove 'lambda_expr_return_type' relation. +compatibility: backwards +lambda_expr_return_type.rel: delete \ No newline at end of file diff --git a/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/old.dbscheme b/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/old.dbscheme new file mode 100644 index 00000000000..a696c8bae06 --- /dev/null +++ b/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/old.dbscheme @@ -0,0 +1,2065 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/semmlecode.csharp.dbscheme b/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..4b9c288ece4 --- /dev/null +++ b/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/semmlecode.csharp.dbscheme @@ -0,0 +1,2058 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/upgrade.properties b/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/upgrade.properties new file mode 100644 index 00000000000..67d927a6329 --- /dev/null +++ b/csharp/downgrades/a696c8bae067f69ab3208e98ce35f4fdf7efb68b/upgrade.properties @@ -0,0 +1,3 @@ +description: Add externalData relation +compatibility: full +externalData.rel: delete diff --git a/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/old.dbscheme b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/old.dbscheme new file mode 100644 index 00000000000..ab09ac82875 --- /dev/null +++ b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/old.dbscheme @@ -0,0 +1,2054 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/semmlecode.csharp.dbscheme b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..ba220124807 --- /dev/null +++ b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/semmlecode.csharp.dbscheme @@ -0,0 +1,2046 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties new file mode 100644 index 00000000000..520f175692e --- /dev/null +++ b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties @@ -0,0 +1,3 @@ +description: Remove 'kind' from 'attributes'. +compatability: full +attributes.rel: reorder attributes.rel (int id, int kind, int type_id, int target) id type_id target \ No newline at end of file diff --git a/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/old.dbscheme b/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/old.dbscheme new file mode 100644 index 00000000000..ba220124807 --- /dev/null +++ b/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/old.dbscheme @@ -0,0 +1,2046 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/semmlecode.csharp.dbscheme b/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..58a680081d2 --- /dev/null +++ b/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/semmlecode.csharp.dbscheme @@ -0,0 +1,2046 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable_direct ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/upgrade.properties b/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/upgrade.properties new file mode 100644 index 00000000000..e645b390610 --- /dev/null +++ b/csharp/downgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/upgrade.properties @@ -0,0 +1,2 @@ +description: Support for compiler-generated event accessors. +compatibility: backwards diff --git a/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj b/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj index dea12d5d012..08add7ad01c 100644 --- a/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj +++ b/csharp/extractor/Semmle.Extraction.CIL.Driver/Semmle.Extraction.CIL.Driver.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net6.0 Semmle.Extraction.CIL.Driver Semmle.Extraction.CIL.Driver false diff --git a/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj b/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj index fa116980d47..8dc6d8a9f76 100644 --- a/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj +++ b/csharp/extractor/Semmle.Extraction.CIL/Semmle.Extraction.CIL.csproj @@ -1,7 +1,7 @@  - net5.0 + net6.0 Semmle.Extraction.CIL Semmle.Extraction.CIL false diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj b/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj index 7ae23fdcd2e..9897dbed627 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj +++ b/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj @@ -2,7 +2,7 @@ Exe - net5.0 + net6.0 Semmle.Extraction.CSharp.Driver Semmle.Extraction.CSharp.Driver false diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyInfo.cs index a234d5ca7b3..11fcfe56a1b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyInfo.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/AssemblyInfo.cs @@ -146,7 +146,7 @@ namespace Semmle.BuildAnalyser * loading the same assembly from different locations. */ using var pereader = new System.Reflection.PortableExecutable.PEReader(new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)); - using var sha1 = new SHA1CryptoServiceProvider(); + using var sha1 = SHA1.Create(); var metadata = pereader.GetMetadata(); unsafe { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs index 8450cd898f8..47bdd3ae568 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BuildAnalysis.cs @@ -160,7 +160,7 @@ namespace Semmle.BuildAnalyser { var bytes = Encoding.Unicode.GetBytes(srcDir); - using var sha1 = new SHA1CryptoServiceProvider(); + using var sha1 = SHA1.Create(); var sha = sha1.ComputeHash(bytes); var sb = new StringBuilder(); foreach (var b in sha.Take(8)) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj index 44d972f7b1c..5546278e93c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj @@ -1,7 +1,7 @@ Exe - net5.0 + net6.0 Semmle.Extraction.CSharp.Standalone Semmle.Extraction.CSharp.Standalone false diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs index 20a9e84a92c..183e42f6ecb 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs @@ -6,11 +6,15 @@ namespace Semmle.Extraction.CSharp.Entities { internal class Accessor : Method { - protected Accessor(Context cx, IMethodSymbol init) - : base(cx, init) { } + private readonly IPropertySymbol property; + protected Accessor(Context cx, IMethodSymbol init, IPropertySymbol property) + : base(cx, init) + { + this.property = property; + } /// - /// Gets the property symbol associated accessor `symbol`, or `null` + /// Gets the property symbol associated with accessor `symbol`, or `null` /// if there is no associated symbol. /// public static IPropertySymbol? GetPropertySymbol(IMethodSymbol symbol) @@ -26,39 +30,26 @@ namespace Semmle.Extraction.CSharp.Entities return props.SingleOrDefault(); } - /// - /// Gets the property symbol associated with this accessor. - /// - private IPropertySymbol? PropertySymbol => GetPropertySymbol(Symbol); - - public new Accessor OriginalDefinition => Create(Context, Symbol.OriginalDefinition); - public override void Populate(TextWriter trapFile) { PopulateMethod(trapFile); PopulateModifiers(trapFile); ContainingType!.PopulateGenerics(); - var prop = PropertySymbol; - if (prop is null) - { - var type = Symbol.AssociatedSymbol?.GetType().ToString() ?? "null"; - Context.ModelError(Symbol, $"Unhandled accessor associated symbol of type {type}"); - return; - } - - var parent = Property.Create(Context, prop); + var parent = Property.Create(Context, property); int kind; Accessor unboundAccessor; - if (SymbolEqualityComparer.Default.Equals(Symbol, prop.GetMethod)) + if (SymbolEqualityComparer.Default.Equals(Symbol, property.GetMethod)) { kind = 1; - unboundAccessor = Create(Context, prop.OriginalDefinition.GetMethod!); + var orig = property.OriginalDefinition; + unboundAccessor = Create(Context, orig.GetMethod!, orig); } - else if (SymbolEqualityComparer.Default.Equals(Symbol, prop.SetMethod)) + else if (SymbolEqualityComparer.Default.Equals(Symbol, property.SetMethod)) { kind = 2; - unboundAccessor = Create(Context, prop.OriginalDefinition.SetMethod!); + var orig = property.OriginalDefinition; + unboundAccessor = Create(Context, orig.SetMethod!, orig); } else { @@ -84,14 +75,14 @@ namespace Semmle.Extraction.CSharp.Entities } } - public static new Accessor Create(Context cx, IMethodSymbol symbol) => - AccessorFactory.Instance.CreateEntityFromSymbol(cx, symbol); + public static Accessor Create(Context cx, IMethodSymbol symbol, IPropertySymbol prop) => + AccessorFactory.Instance.CreateEntity(cx, symbol, (symbol, prop)); - private class AccessorFactory : CachedEntityFactory + private class AccessorFactory : CachedEntityFactory<(IMethodSymbol, IPropertySymbol), Accessor> { public static AccessorFactory Instance { get; } = new AccessorFactory(); - public override Accessor Create(Context cx, IMethodSymbol init) => new Accessor(cx, init); + public override Accessor Create(Context cx, (IMethodSymbol, IPropertySymbol) init) => new(cx, init.Item1, init.Item2); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs index a1b976c4a6c..23c17252087 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.CodeAnalysis; @@ -6,18 +8,28 @@ using Semmle.Extraction.Entities; namespace Semmle.Extraction.CSharp.Entities { + internal enum AttributeKind + { + Default = 0, + Return = 1, + Assembly = 2, + Module = 3, + } + internal class Attribute : CachedEntity, IExpressionParentEntity { bool IExpressionParentEntity.IsTopLevelParent => true; private readonly AttributeSyntax? attributeSyntax; private readonly IEntity entity; + private readonly AttributeKind kind; - private Attribute(Context cx, AttributeData attributeData, IEntity entity) + private Attribute(Context cx, AttributeData attributeData, IEntity entity, AttributeKind kind) : base(cx, attributeData) { this.attributeSyntax = attributeData.ApplicationSyntaxReference?.GetSyntax() as AttributeSyntax; this.entity = entity; + this.kind = kind; } public override void WriteId(EscapingTextWriter trapFile) @@ -48,7 +60,7 @@ namespace Semmle.Extraction.CSharp.Entities public override void Populate(TextWriter trapFile) { var type = Type.Create(Context, Symbol.AttributeClass); - trapFile.attributes(this, type.TypeRef, entity); + trapFile.attributes(this, kind, type.TypeRef, entity); trapFile.attribute_location(this, Location); if (attributeSyntax is not null) @@ -125,26 +137,36 @@ namespace Semmle.Extraction.CSharp.Entities public override bool NeedsPopulation => true; - public static void ExtractAttributes(Context cx, ISymbol symbol, IEntity entity) + private static void ExtractAttributes(Context cx, IEnumerable attributes, IEntity entity, AttributeKind kind) { - foreach (var attribute in symbol.GetAttributes()) + foreach (var attribute in attributes) { - Create(cx, attribute, entity); + Create(cx, attribute, entity, kind); } } - public static Attribute Create(Context cx, AttributeData attributeData, IEntity entity) + public static void ExtractAttributes(Context cx, ISymbol symbol, IEntity entity) { - var init = (attributeData, entity); + ExtractAttributes(cx, symbol.GetAttributes(), entity, AttributeKind.Default); + if (symbol is IMethodSymbol method) + { + ExtractAttributes(cx, method.GetReturnTypeAttributes(), entity, AttributeKind.Return); + } + } + + + public static Attribute Create(Context cx, AttributeData attributeData, IEntity entity, AttributeKind kind) + { + var init = (attributeData, entity, kind); return AttributeFactory.Instance.CreateEntity(cx, attributeData, init); } - private class AttributeFactory : CachedEntityFactory<(AttributeData attributeData, IEntity receiver), Attribute> + private class AttributeFactory : CachedEntityFactory<(AttributeData attributeData, IEntity receiver, AttributeKind kind), Attribute> { public static readonly AttributeFactory Instance = new AttributeFactory(); - public override Attribute Create(Context cx, (AttributeData attributeData, IEntity receiver) init) => - new Attribute(cx, init.attributeData, init.receiver); + public override Attribute Create(Context cx, (AttributeData attributeData, IEntity receiver, AttributeKind kind) init) => + new Attribute(cx, init.attributeData, init.receiver, init.kind); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs index 0884caf1396..b578f51e0e0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs @@ -3,45 +3,46 @@ using System.IO; namespace Semmle.Extraction.CSharp.Entities { - internal class EventAccessor : Accessor + internal class EventAccessor : Method { - private EventAccessor(Context cx, IMethodSymbol init) - : base(cx, init) { } + private readonly IEventSymbol @event; + + private EventAccessor(Context cx, IMethodSymbol init, IEventSymbol @event) + : base(cx, init) + { + this.@event = @event; + } /// - /// Gets the event symbol associated with this accessor. + /// Gets the event symbol associated with accessor `symbol`, or `null` + /// if there is no associated symbol. /// - private IEventSymbol? EventSymbol => Symbol.AssociatedSymbol as IEventSymbol; + public static IEventSymbol? GetEventSymbol(IMethodSymbol symbol) => + symbol.AssociatedSymbol as IEventSymbol; public override void Populate(TextWriter trapFile) { PopulateMethod(trapFile); ContainingType!.PopulateGenerics(); - var @event = EventSymbol; - if (@event is null) - { - var type = Symbol.AssociatedSymbol?.GetType().ToString() ?? "null"; - Context.ModelError(Symbol, $"Unhandled event accessor associated symbol of type {type}"); - return; - } - var parent = Event.Create(Context, @event); int kind; EventAccessor unboundAccessor; if (SymbolEqualityComparer.Default.Equals(Symbol, @event.AddMethod)) { kind = 1; - unboundAccessor = Create(Context, @event.OriginalDefinition.AddMethod!); + var orig = @event.OriginalDefinition; + unboundAccessor = Create(Context, orig.AddMethod!, orig); } else if (SymbolEqualityComparer.Default.Equals(Symbol, @event.RemoveMethod)) { kind = 2; - unboundAccessor = Create(Context, @event.OriginalDefinition.RemoveMethod!); + var orig = @event.OriginalDefinition; + unboundAccessor = Create(Context, orig.RemoveMethod!, orig); } else { - Context.ModelError(Symbol, "Undhandled event accessor kind"); + Context.ModelError(Symbol, $"Undhandled event accessor kind {Symbol.ToDisplayString()}"); return; } @@ -51,16 +52,21 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.event_accessor_location(this, l); Overrides(trapFile); + + if (Symbol.FromSource() && Block is null) + { + trapFile.compiler_generated(this); + } } - public static new EventAccessor Create(Context cx, IMethodSymbol symbol) => - EventAccessorFactory.Instance.CreateEntityFromSymbol(cx, symbol); + public static EventAccessor Create(Context cx, IMethodSymbol symbol, IEventSymbol @event) => + EventAccessorFactory.Instance.CreateEntity(cx, symbol, (symbol, @event)); - private class EventAccessorFactory : CachedEntityFactory + private class EventAccessorFactory : CachedEntityFactory<(IMethodSymbol, IEventSymbol), EventAccessor> { public static EventAccessorFactory Instance { get; } = new EventAccessorFactory(); - public override EventAccessor Create(Context cx, IMethodSymbol init) => new EventAccessor(cx, init); + public override EventAccessor Create(Context cx, (IMethodSymbol, IEventSymbol) init) => new EventAccessor(cx, init.Item1, init.Item2); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs index 78b5d9dba98..a0353ff474b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Lambda.cs @@ -22,12 +22,13 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Parameter.Create(Context, symbol, this); } - private Lambda(ExpressionNodeInfo info, CSharpSyntaxNode body, IEnumerable @params) + private Lambda(ExpressionNodeInfo info, CSharpSyntaxNode body, IEnumerable @params, TypeSyntax? @return) : base(info) { if (Context.GetModel(info.Node).GetSymbolInfo(info.Node).Symbol is IMethodSymbol symbol) { Modifier.ExtractModifiers(Context, info.Context.TrapWriter.Writer, this, symbol); + Attribute.ExtractAttributes(Context, symbol, this); } else { @@ -40,6 +41,13 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions foreach (var param in @params) VisitParameter(param); + if (@return is not null) + { + var symbol = Context.GetType(@return); + var type = Entities.Type.Create(Context, symbol); + var trapFile = Context.TrapWriter.Writer; + trapFile.lambda_expr_return_type(this, type.TypeRef); + } if (body is ExpressionSyntax exprBody) Create(Context, exprBody, this, 0); else if (body is BlockSyntax blockBody) @@ -50,17 +58,17 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions } private Lambda(ExpressionNodeInfo info, ParenthesizedLambdaExpressionSyntax node) - : this(info.SetKind(ExprKind.LAMBDA), node.Body, node.ParameterList.Parameters) { } + : this(info.SetKind(ExprKind.LAMBDA), node.Body, node.ParameterList.Parameters, node.ReturnType) { } public static Lambda Create(ExpressionNodeInfo info, ParenthesizedLambdaExpressionSyntax node) => new Lambda(info, node); private Lambda(ExpressionNodeInfo info, SimpleLambdaExpressionSyntax node) - : this(info.SetKind(ExprKind.LAMBDA), node.Body, Enumerators.Singleton(node.Parameter)) { } + : this(info.SetKind(ExprKind.LAMBDA), node.Body, Enumerators.Singleton(node.Parameter), null) { } public static Lambda Create(ExpressionNodeInfo info, SimpleLambdaExpressionSyntax node) => new Lambda(info, node); private Lambda(ExpressionNodeInfo info, AnonymousMethodExpressionSyntax node) : - this(info.SetKind(ExprKind.ANONYMOUS_METHOD), node.Body, node.ParameterList is null ? Enumerable.Empty() : node.ParameterList.Parameters) + this(info.SetKind(ExprKind.ANONYMOUS_METHOD), node.Body, node.ParameterList is null ? Enumerable.Empty() : node.ParameterList.Parameters, null) { } public static Lambda Create(ExpressionNodeInfo info, AnonymousMethodExpressionSyntax node) => new Lambda(info, node); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs index e12073ac6b2..1aa515eca2a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Patterns/PropertyPattern.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using Microsoft.CodeAnalysis.CSharp.Syntax; using Semmle.Extraction.Kinds; using Semmle.Extraction.Entities; @@ -10,17 +12,69 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions base(new ExpressionInfo(cx, null, cx.CreateLocation(pp.GetLocation()), ExprKind.PROPERTY_PATTERN, parent, child, false, null)) { child = 0; - var trapFile = cx.TrapWriter.Writer; foreach (var sub in pp.Subpatterns) { - var p = Expressions.Pattern.Create(cx, sub.Pattern, this, child++); - if (sub.NameColon is null) + if (sub.ExpressionColon is null) { - Context.ModelError(sub, "Expected to find 'Name:' in pattern."); + Context.ModelError(sub, "Expected to find 'Expression:' in pattern."); continue; } - trapFile.exprorstmt_name(p, sub.NameColon.Name.ToString()); + MakeExpressions(cx, this, sub, child++); } } + + private record AccessStep(string Identifier, Microsoft.CodeAnalysis.Location Location); + + private class AccessStepPack + { + public readonly List Prefix = new List(); + public AccessStep Last { get; private set; } + + public AccessStepPack Add(string identifier, Microsoft.CodeAnalysis.Location location) + { + Prefix.Add(Last); + Last = new AccessStep(identifier, location); + return this; + } + + public AccessStepPack(string identifier, Microsoft.CodeAnalysis.Location location) => + Last = new AccessStep(identifier, location); + } + + private static AccessStepPack GetAccessStepPack(ExpressionSyntax syntax) => + syntax switch + { + MemberAccessExpressionSyntax memberAccess => GetAccessStepPack(memberAccess.Expression).Add(memberAccess.Name.Identifier.ValueText, memberAccess.Name.Identifier.GetLocation()), + IdentifierNameSyntax identifier => new AccessStepPack(identifier.Identifier.Text, identifier.GetLocation()), + _ => throw new InternalError(syntax, "Unexpected expression syntax in property patterns."), + }; + + private static AccessStepPack GetAccessStepPack(BaseExpressionColonSyntax syntax) => + syntax switch + { + NameColonSyntax ncs => new AccessStepPack(ncs.Name.ToString(), ncs.Name.GetLocation()), + ExpressionColonSyntax ecs => GetAccessStepPack(ecs.Expression), + _ => throw new InternalError(syntax, "Unsupported expression colon in property pattern."), + }; + + private static Expression CreateSyntheticExp(Context cx, Microsoft.CodeAnalysis.Location location, IExpressionParentEntity parent, int child) => + new Expression(new ExpressionInfo(cx, null, cx.CreateLocation(location), ExprKind.PROPERTY_PATTERN, parent, child, false, null)); + + private static void MakeExpressions(Context cx, IExpressionParentEntity parent, SubpatternSyntax syntax, int child) + { + var trapFile = cx.TrapWriter.Writer; + var pack = GetAccessStepPack(syntax.ExpressionColon!); + + foreach (var step in pack.Prefix) + { + var exp = CreateSyntheticExp(cx, step.Location, parent, child); + trapFile.exprorstmt_name(exp, step.Identifier); + parent = exp; + child = 0; + } + + var p = Expressions.Pattern.Create(cx, syntax.Pattern, parent, child); + trapFile.exprorstmt_name(p, pack.Last.Identifier); + } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs index 20c0033c4de..8777e95d5d0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs @@ -262,10 +262,10 @@ namespace Semmle.Extraction.CSharp.Entities return Destructor.Create(cx, methodDecl); case MethodKind.PropertyGet: case MethodKind.PropertySet: - return Accessor.GetPropertySymbol(methodDecl) is null ? OrdinaryMethod.Create(cx, methodDecl) : (Method)Accessor.Create(cx, methodDecl); + return Accessor.GetPropertySymbol(methodDecl) is IPropertySymbol prop ? Accessor.Create(cx, methodDecl, prop) : OrdinaryMethod.Create(cx, methodDecl); case MethodKind.EventAdd: case MethodKind.EventRemove: - return EventAccessor.Create(cx, methodDecl); + return EventAccessor.GetEventSymbol(methodDecl) is IEventSymbol @event ? EventAccessor.Create(cx, methodDecl, @event) : OrdinaryMethod.Create(cx, methodDecl); case MethodKind.UserDefinedOperator: case MethodKind.BuiltinOperator: return UserOperator.Create(cx, methodDecl); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs index 49afa50ccc1..11e54ddff35 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs @@ -178,6 +178,9 @@ namespace Semmle.Extraction.CSharp.Entities /// The converted name. private static string OperatorSymbol(Context cx, IMethodSymbol method) { + if (method.ExplicitInterfaceImplementations.Any()) + return OperatorSymbol(cx, method.ExplicitInterfaceImplementations.First()); + var methodName = method.Name; if (!OperatorSymbol(methodName, out var result)) cx.ModelError(method, $"Unhandled operator name in OperatorSymbol(): '{methodName}'"); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Populators/TypeContainerVisitor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Populators/TypeContainerVisitor.cs index 3e18f0ab836..6ee8db1d93a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Populators/TypeContainerVisitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Populators/TypeContainerVisitor.cs @@ -86,11 +86,17 @@ namespace Semmle.Extraction.CSharp.Populators return; var outputAssembly = Assembly.CreateOutputAssembly(Cx); + var kind = node.Target?.Identifier.Kind() switch + { + SyntaxKind.AssemblyKeyword => Entities.AttributeKind.Assembly, + SyntaxKind.ModuleKeyword => Entities.AttributeKind.Module, + _ => throw new InternalError(node, "Unhandled global target") + }; foreach (var attribute in node.Attributes) { if (attributeLookup.Value(attribute) is AttributeData attributeData) { - var ae = Entities.Attribute.Create(Cx, attributeData, outputAssembly); + var ae = Entities.Attribute.Create(Cx, attributeData, outputAssembly, kind); Cx.BindComments(ae, attribute.GetLocation()); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj b/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj index 3aa2da32d6b..77e204997b3 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj +++ b/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 Semmle.Extraction.CSharp Semmle.Extraction.CSharp false diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs index be4fe339975..3476aa027bf 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs @@ -32,8 +32,8 @@ namespace Semmle.Extraction.CSharp internal static void array_element_type(this TextWriter trapFile, ArrayType array, int dimension, int rank, Type elementType) => trapFile.WriteTuple("array_element_type", array, dimension, rank, elementType); - internal static void attributes(this TextWriter trapFile, Attribute attribute, Type attributeType, IEntity entity) => - trapFile.WriteTuple("attributes", attribute, attributeType, entity); + internal static void attributes(this TextWriter trapFile, Attribute attribute, AttributeKind kind, Type attributeType, IEntity entity) => + trapFile.WriteTuple("attributes", attribute, kind, attributeType, entity); internal static void attribute_location(this TextWriter trapFile, Attribute attribute, Location location) => trapFile.WriteTuple("attribute_location", attribute, location); @@ -215,6 +215,9 @@ namespace Semmle.Extraction.CSharp internal static void indexers(this TextWriter trapFile, Indexer propKey, string name, Type declaringType, Type memberType, Indexer unboundProperty) => trapFile.WriteTuple("indexers", propKey, name, declaringType, memberType, unboundProperty); + internal static void lambda_expr_return_type(this TextWriter trapFile, Lambda expr, Type returnType) => + trapFile.WriteTuple("lambda_expr_return_type", expr, returnType); + internal static void local_function_stmts(this TextWriter trapFile, Entities.Statements.LocalFunction fnStmt, LocalFunction fn) => trapFile.WriteTuple("local_function_stmts", fnStmt, fn); diff --git a/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj b/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj index e60ffc935ca..c4fa93f9697 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj +++ b/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 false win-x64;linux-x64;osx-x64 enable diff --git a/csharp/extractor/Semmle.Extraction/Options.cs b/csharp/extractor/Semmle.Extraction/Options.cs index 3ec033c144d..6195b498ba9 100644 --- a/csharp/extractor/Semmle.Extraction/Options.cs +++ b/csharp/extractor/Semmle.Extraction/Options.cs @@ -52,7 +52,7 @@ namespace Semmle.Extraction /// /// The compression algorithm used for trap files. /// - public TrapWriter.CompressionMode TrapCompression { get; set; } = TrapWriter.CompressionMode.Gzip; + public TrapWriter.CompressionMode TrapCompression { get; set; } = TrapWriter.CompressionMode.Brotli; public virtual bool HandleOption(string key, string value) { diff --git a/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj b/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj index 5990df6e4b0..f647003ebf0 100644 --- a/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj +++ b/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 Semmle.Extraction Semmle.Extraction false diff --git a/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj b/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj index 3aa59bf6b9b..7447a7e82c1 100644 --- a/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj +++ b/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 false win-x64;linux-x64;osx-x64 enable diff --git a/csharp/extractor/Semmle.Util/FileUtils.cs b/csharp/extractor/Semmle.Util/FileUtils.cs index e0937432049..2c43a46f0f8 100644 --- a/csharp/extractor/Semmle.Util/FileUtils.cs +++ b/csharp/extractor/Semmle.Util/FileUtils.cs @@ -84,7 +84,7 @@ namespace Semmle.Util public static string ComputeFileHash(string filePath) { using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); - using var shaAlg = new SHA256Managed(); + using var shaAlg = SHA256.Create(); var sha = shaAlg.ComputeHash(fileStream); var hex = new StringBuilder(sha.Length * 2); foreach (var b in sha) diff --git a/csharp/extractor/Semmle.Util/Semmle.Util.csproj b/csharp/extractor/Semmle.Util/Semmle.Util.csproj index 63ac78cb7cc..befa19db6a5 100644 --- a/csharp/extractor/Semmle.Util/Semmle.Util.csproj +++ b/csharp/extractor/Semmle.Util/Semmle.Util.csproj @@ -1,7 +1,7 @@ - net5.0 + net6.0 Semmle.Util Semmle.Util false diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 6c51f3c8ac7..e6ee473d395 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1 +1,7 @@ +## 1.0.3 + +## 1.0.2 + ## 1.0.0 + +## 0.0.6 diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.0.2.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.0.2.md new file mode 100644 index 00000000000..382d5a73279 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.0.2.md @@ -0,0 +1 @@ +## 1.0.2 diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.0.3.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.0.3.md new file mode 100644 index 00000000000..d24c227b814 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.0.3.md @@ -0,0 +1 @@ +## 1.0.3 diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 2f5886268c6..06fa75b96cb 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.1 +lastReleaseVersion: 1.0.3 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 1eb2b7c4ed7..7c9df44253c 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.0.2-dev +version: 1.0.4-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 6c51f3c8ac7..e6ee473d395 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1 +1,7 @@ +## 1.0.3 + +## 1.0.2 + ## 1.0.0 + +## 0.0.6 diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.0.2.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.0.2.md new file mode 100644 index 00000000000..382d5a73279 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.0.2.md @@ -0,0 +1 @@ +## 1.0.2 diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.0.3.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.0.3.md new file mode 100644 index 00000000000..d24c227b814 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.0.3.md @@ -0,0 +1 @@ +## 1.0.3 diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 2f5886268c6..06fa75b96cb 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.1 +lastReleaseVersion: 1.0.3 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index aa421871afd..45e39cb9a9d 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.0.2-dev +version: 1.0.4-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/test/qlpack.yml b/csharp/ql/campaigns/Solorigate/test/qlpack.yml index 97f9c9407a8..82bc38ceba7 100644 --- a/csharp/ql/campaigns/Solorigate/test/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/test/qlpack.yml @@ -6,7 +6,7 @@ groups: dependencies: codeql/csharp-all: "*" codeql/csharp-queries: "*" - codeql/charp-solorigate-all: "*" - codeql/charp-solorigate-queries: "*" + codeql/csharp-solorigate-all: "*" + codeql/csharp-solorigate-queries: "*" extractor: csharp tests: . diff --git a/csharp/ql/consistency-queries/qlpack.yml b/csharp/ql/consistency-queries/qlpack.yml index ca83245a97f..e42017ec10a 100644 --- a/csharp/ql/consistency-queries/qlpack.yml +++ b/csharp/ql/consistency-queries/qlpack.yml @@ -1,6 +1,5 @@ name: codeql-csharp-consistency-queries -version: 0.0.0 -libraryPathDependencies: - - codeql/csharp-all - - codeql/csharp-queries +groups: [csharp, test, consistency-queries] +dependencies: + codeql/csharp-all: "*" extractor: csharp diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 299d8880abc..761175ca743 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,35 @@ +## 0.0.9 + +### Major Analysis Improvements + +* Added support for C# 10 lambda improvements + * Explicit return types on lambda expressions. + * Lambda expression can be tagged with method and return value attributes. +* Added support for C# 10 [Extended property patterns](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#extended-property-patterns). +* Return value attributes are extracted. +* The QL `Attribute` class now has subclasses for each kind of attribute. + +## 0.0.8 + +### Deprecated APIs + +* The `codeql/csharp-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/csharp-all` CodeQL pack. + +### Major Analysis Improvements + +Added support for the following C# 10 features. +* [Record structs](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#record-structs). +* [Improvements of structure types](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#improvements-of-structure-types). + * Instance parameterless constructor in a structure type. + * Enhance `WithExpr` in QL to support `structs` and anonymous classes. +* [Global using directives](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#global-using-directives). +* [File-scoped namespace declaration](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#file-scoped-namespace-declaration). +* [Enhanced #line pragma](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#enhanced-line-pragma). + +### Minor Analysis Improvements + +* The query `cs/local-shadows-member` no longer highlights parameters of `record` types. + ## 0.0.7 ## 0.0.6 diff --git a/csharp/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md b/csharp/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md deleted file mode 100644 index d73fb9519c0..00000000000 --- a/csharp/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* The `codeql/csharp-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/charp-all` CodeQL pack. diff --git a/csharp/ql/lib/change-notes/2022-01-18-local-shadows-member.md b/csharp/ql/lib/change-notes/2022-01-18-local-shadows-member.md deleted file mode 100644 index dad981966ba..00000000000 --- a/csharp/ql/lib/change-notes/2022-01-18-local-shadows-member.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `cs/local-shadows-member` no longer highlights parameters of `record` types. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/2022-01-25-csharp10-features.md b/csharp/ql/lib/change-notes/released/0.0.8.md similarity index 66% rename from csharp/ql/lib/change-notes/2022-01-25-csharp10-features.md rename to csharp/ql/lib/change-notes/released/0.0.8.md index abc5b224c59..107e832cf67 100644 --- a/csharp/ql/lib/change-notes/2022-01-25-csharp10-features.md +++ b/csharp/ql/lib/change-notes/released/0.0.8.md @@ -1,6 +1,11 @@ ---- -category: majorAnalysis ---- +## 0.0.8 + +### Deprecated APIs + +* The `codeql/csharp-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/csharp-all` CodeQL pack. + +### Major Analysis Improvements + Added support for the following C# 10 features. * [Record structs](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#record-structs). * [Improvements of structure types](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#improvements-of-structure-types). @@ -8,4 +13,8 @@ Added support for the following C# 10 features. * Enhance `WithExpr` in QL to support `structs` and anonymous classes. * [Global using directives](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#global-using-directives). * [File-scoped namespace declaration](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#file-scoped-namespace-declaration). -* [Enhanced #line pragma](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#enhanced-line-pragma). \ No newline at end of file +* [Enhanced #line pragma](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#enhanced-line-pragma). + +### Minor Analysis Improvements + +* The query `cs/local-shadows-member` no longer highlights parameters of `record` types. diff --git a/csharp/ql/lib/change-notes/released/0.0.9.md b/csharp/ql/lib/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..be87217e4ac --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.0.9.md @@ -0,0 +1,10 @@ +## 0.0.9 + +### Major Analysis Improvements + +Added support for C# 10 lambda improvements +* Explicit return types on lambda expressions. +* Lambda expression can be tagged with method and return value attributes. +* Added support for C# 10 [Extended property patterns](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#extended-property-patterns). +* Return value attributes are extracted. +* The QL `Attribute` class now has subclasses for each kind of attribute. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index a2a5484910b..ecdd64fbab8 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.9 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 06acac17e3a..e38e027bbb9 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.0.8-dev +version: 0.0.10-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/Attribute.qll b/csharp/ql/lib/semmle/code/csharp/Attribute.qll index dae9f8a9fad..0910ade7d0f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Attribute.qll +++ b/csharp/ql/lib/semmle/code/csharp/Attribute.qll @@ -10,8 +10,8 @@ private import TypeRef * An element that can have attributes. Either an assembly (`Assembly`), a field (`Field`), * a parameter (`Parameter`), an operator (`Operator`), a method (`Method`), a constructor (`Constructor`), * a destructor (`Destructor`), a callable accessor (`CallableAccessor`), a value or reference type - * (`ValueOrRefType`), a declaration with accessors (`DeclarationWithAccessors`), or a local function - * (`LocalFunction`). + * (`ValueOrRefType`), a declaration with accessors (`DeclarationWithAccessors`), a local function + * (`LocalFunction`) or a lambda expression (`LambdaExp`). */ class Attributable extends @attributable { /** Gets an attribute attached to this element, if any. */ @@ -36,6 +36,12 @@ class Attributable extends @attributable { } } +private string getAttributeName(Attribute a) { + exists(string type | type = a.getType().getName() | + if type.matches("%Attribute") then result = type.prefix(type.length() - 9) else result = type + ) +} + /** * An attribute, for example `[...]` on line 1 in * @@ -50,10 +56,10 @@ class Attributable extends @attributable { */ class Attribute extends TopLevelExprParent, @attribute { /** Gets the type of this attribute. */ - Class getType() { attributes(this, getTypeRef(result), _) } + Class getType() { attributes(this, _, getTypeRef(result), _) } /** Gets the element that this attribute is attached to. */ - Attributable getTarget() { attributes(this, _, result) } + Attributable getTarget() { attributes(this, _, _, result) } /** * Gets the `i`th argument of this attribute. This includes both constructor @@ -88,12 +94,55 @@ class Attribute extends TopLevelExprParent, @attribute { override Location getALocation() { attribute_location(this, result) } - override string toString() { - exists(string type, string name | type = this.getType().getName() | - (if type.matches("%Attribute") then name = type.prefix(type.length() - 9) else name = type) and - result = "[" + name + "(...)]" - ) - } + override string toString() { result = "[" + getAttributeName(this) + "(...)]" } override string getAPrimaryQlClass() { result = "Attribute" } } + +/** + * An attribute with default kind, for example `[...]` on line 1 in + * ```csharp + * [MyAttribute(0)] + * int SomeMethod() { return 1; } + * ``` + */ +class DefaultAttribute extends Attribute, @attribute_default { + override string getAPrimaryQlClass() { result = "DefaultAttribute" } +} + +/** + * An attribute with return kind, for example `[...]` on line 1 in + * ```csharp + * [return: MyAttribute(0)] + * int SomeMethod() { return 1; } + * ``` + */ +class ReturnAttribute extends Attribute, @attribute_return { + override string toString() { result = "[return: " + getAttributeName(this) + "(...)]" } + + override string getAPrimaryQlClass() { result = "ReturnAttribute" } +} + +/** + * An attribute with assembly kind, for example `[...]` on line 1 in + * ```csharp + * [assembly: MyAttribute(0)] + * ``` + */ +class AssemblyAttribute extends Attribute, @attribute_assembly { + override string toString() { result = "[assembly: " + getAttributeName(this) + "(...)]" } + + override string getAPrimaryQlClass() { result = "AssemblyAttribute" } +} + +/** + * An attribute with module kind, for example `[...]` on line 1 in + * ```csharp + * [module: MyAttribute(0)] + * ``` + */ +class ModuleAttribute extends Attribute, @attribute_module { + override string toString() { result = "[module: " + getAttributeName(this) + "(...)]" } + + override string getAPrimaryQlClass() { result = "ModuleAttribute" } +} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index f141fd1245d..7e9b8f7818a 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -32,12 +32,20 @@ class Guard extends Expr { isGuardedByNode(cfn, this, sub, v) } + /** + * Holds if `cfn` is guarded by this expression having value `v`. + * + * Note: This predicate is inlined. + */ + pragma[inline] + predicate controlsNode(ControlFlow::Nodes::ElementNode cfn, AbstractValue v) { + guardControls(this, cfn.getBasicBlock(), v) + } + /** * Holds if basic block `bb` is guarded by this expression having value `v`. */ - predicate controlsBasicBlock(BasicBlock bb, AbstractValue v) { - Internal::guardControls(this, bb, v) - } + predicate controlsBasicBlock(BasicBlock bb, AbstractValue v) { guardControls(this, bb, v) } /** * Holds if this guard is an equality test between `e1` and `e2`. If the test is @@ -46,7 +54,7 @@ class Guard extends Expr { */ predicate isEquality(Expr e1, Expr e2, boolean polarity) { exists(BooleanValue v | - this = Internal::getAnEqualityCheck(e1, v, e2) and + this = getAnEqualityCheck(e1, v, e2) and polarity = v.getValue() ) } 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 53465e72716..e7ae2e489a2 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImplShared.qll @@ -214,7 +214,7 @@ abstract class SplitKind extends SplitKindBase { abstract string toString(); } -/** Provides the interface for implementing an entity to split on. */ +/** An interface for implementing an entity to split on. */ abstract class SplitImpl extends Split { /** Gets the kind of this split. */ abstract SplitKind getKind(); @@ -900,10 +900,25 @@ module TestOutput { } query predicate edges(RelevantNode pred, RelevantNode succ, string attr, string val) { + attr = "semmle.label" and exists(SuccessorType t | succ = getASuccessor(pred, t) | - attr = "semmle.label" and if successorTypeIsSimple(t) then val = "" else val = t.toString() ) + or + attr = "semmle.order" and + val = + any(int i | + succ = + rank[i](RelevantNode s, SuccessorType t, Location l | + s = getASuccessor(pred, t) and + l = s.getLocation() + | + s + order by + l.getFile().getBaseName(), l.getFile().getAbsolutePath(), l.getStartLine(), + l.getStartColumn(), l.getEndLine(), l.getEndColumn(), t.toString() + ) + ).toString() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index 131480a8b59..7e258e7d344 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -177,6 +177,19 @@ private predicate isNullDefaultArgument(Ssa::ExplicitDefinition def, AlwaysNullE ) } +/** + * Holds if `edef` is an implicit entry definition for a captured variable that + * may be guarded, because a call to the capturing callable is guarded. + */ +private predicate isMaybeGuardedCapturedDef(Ssa::ImplicitEntryDefinition edef) { + exists(Ssa::ExplicitDefinition def, ControlFlow::Nodes::ElementNode c, G::Guard g, NullValue nv | + def.isCapturedVariableDefinitionFlowIn(edef, c, _) and + g = def.getARead() and + g.controlsNode(c, nv) and + nv.isNonNull() + ) +} + /** Holds if `def` is an SSA definition that may be `null`. */ private predicate defMaybeNull(Ssa::Definition def, string msg, Element reason) { not nonNullDef(def) and @@ -214,6 +227,7 @@ private predicate defMaybeNull(Ssa::Definition def, string msg, Element reason) exists(Dereference d | dereferenceAt(_, _, def, d) | d.hasNullableType() and not def instanceof Ssa::PhiNode and + not isMaybeGuardedCapturedDef(def) and reason = def.getSourceVariable().getAssignable() and msg = "because it has a nullable type" ) 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 5debcf7b178..50dcb8901ea 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -1290,7 +1290,7 @@ class DataFlowCallOption extends TDataFlowCallOption { } } -/** Content tagged with the type of a containing object. */ +/** A `Content` tagged with the type of a containing object. */ class TypedContent extends MkTypedContent { private Content c; private DataFlowType t; 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 d9ab0bd2fe7..b6d749e18fd 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -160,6 +160,7 @@ predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } * Holds if data can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } /** 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 1ded4e7bed1..3cd828078bc 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -90,7 +90,9 @@ module Public { predicate contains(SummaryComponent c) { c = this.drop(_).head() } /** Gets the bottom element of this stack. */ - SummaryComponent bottom() { result = this.drop(this.length() - 1).head() } + SummaryComponent bottom() { + this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() + } /** Gets a textual representation of this stack. */ string toString() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll index 6e4ba538a40..1e60165d748 100755 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPublic.qll @@ -5,12 +5,14 @@ private import TaintTrackingPrivate * Holds if taint propagates from `source` to `sink` in zero or more local * (intra-procedural) steps. */ +pragma[inline] predicate localTaint(DataFlow::Node source, DataFlow::Node sink) { localTaintStep*(source, sink) } /** * Holds if taint can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprTaint(Expr e1, Expr e2) { localTaint(DataFlow::exprNode(e1), DataFlow::exprNode(e2)) } diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll index 84bcf7b87bc..c3bf63b1779 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Creation.qll @@ -5,6 +5,7 @@ import Expr import semmle.code.csharp.Callable private import semmle.code.csharp.frameworks.system.linq.Expressions +private import semmle.code.csharp.TypeRef /** * Either an object initializer (`ObjectInitializer`) or a collection @@ -434,6 +435,12 @@ class AnonymousFunctionExpr extends Expr, Callable, Modifiable, @anonymous_funct * A lambda expression, for example `(int x) => x + 1`. */ class LambdaExpr extends AnonymousFunctionExpr, @lambda_expr { + /* Holds if this lambda expression has explicit return type. */ + predicate hasExplicitReturnType() { lambda_expr_return_type(this, _) } + + /* Gets the explicit return type of this lambda expression, if any. */ + Type getExplicitReturnType() { lambda_expr_return_type(this, getTypeRef(result)) } + override string toString() { result = "(...) => ..." } override string getAPrimaryQlClass() { result = "LambdaExpr" } diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index 58a680081d2..a696c8bae06 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -166,6 +166,13 @@ compilation_assembly( int assembly: @assembly ref ) +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + sourceLocationPrefix( string prefix: string ref); @@ -176,7 +183,7 @@ sourceLocationPrefix( /** ELEMENTS **/ @element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration - | @using_directive | @type_parameter_constraints + | @using_directive | @type_parameter_constraints | @externalDataElement | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; @declaration = @callable | @generic | @assignable | @namespace; @@ -191,7 +198,7 @@ sourceLocationPrefix( @attributable = @assembly | @field | @parameter | @operator | @method | @constructor | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors - | @local_function; + | @local_function | @lambda_expr; /** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ @@ -520,9 +527,17 @@ tuple_element( attributes( unique int id: @attribute, + int kind: int ref, int type_id: @type_or_ref ref, int target: @attributable ref); +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + attribute_location( int id: @attribute ref, int loc: @location ref); @@ -648,7 +663,7 @@ has_modifiers( int id: @modifiable_direct ref, int mod_id: @modifier ref); -compiler_generated(unique int id: @modifiable_direct ref); +compiler_generated(unique int id: @modifiable ref); /** MEMBERS **/ @@ -1261,6 +1276,10 @@ expr_argument_name( unique int id: @expr ref, string name: string ref); +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + /** CONTROL/DATA FLOW **/ @control_flow_element = @stmt | @expr; diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme.stats b/csharp/ql/lib/semmlecode.csharp.dbscheme.stats index 9f8acbb2b0a..2d1c330c7d2 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme.stats +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme.stats @@ -2,43 +2,47 @@ @compilation - 1622 + 1549 @diagnostic - 25024 + 24565 @extractor_message - 44691 + 41551 + + + @externalDataElement + 0 @assembly - 30136 + 27546 @file - 508426 + 464724 @folder - 484045 + 442439 @namespace - 367575 + 343754 @namespace_declaration - 32679 + 31219 @using_namespace_directive - 170883 + 163247 @using_static_directive - 483 + 474 @directive_if @@ -58,11 +62,11 @@ @directive_region - 25505 + 24936 @directive_endregion - 25505 + 24936 @directive_line @@ -70,7 +74,7 @@ @directive_nullable - 3382 + 3320 @directive_warning @@ -94,111 +98,111 @@ @pragma_warning - 1873 + 1831 @bool_type - 169 + 154 @char_type - 169 + 154 @decimal_type - 169 + 154 @sbyte_type - 169 + 154 @short_type - 169 + 154 @int_type - 169 + 154 @long_type - 169 + 154 @byte_type - 169 + 154 @ushort_type - 169 + 154 @uint_type - 169 + 154 @ulong_type - 169 + 154 @float_type - 169 + 154 @double_type - 169 + 154 @enum_type - 149911 + 140196 @struct_type - 1223173 + 1223212 @class_type - 3789350 + 3543777 @interface_type - 2384805 + 2230255 @delegate_type - 2249822 + 2249894 @null_type - 169 + 154 @type_parameter - 831790 + 831817 @pointer_type - 9784 + 9150 @nullable_type - 16705 + 15622 @array_type - 85803 + 80242 @void_type - 169 + 154 @int_ptr_type - 169 + 154 @dynamic_type - 21 + 20 @arglist_type @@ -210,11 +214,11 @@ @tuple_type - 27812 + 26010 @function_pointer_type - 27738 + 27733 @uint_ptr_type @@ -222,83 +226,95 @@ @typeref - 3537560 + 3308304 - @attribute - 10551328 + @attribute_default + 9866908 + + + @attribute_return + 235225 + + + @attribute_assembly + 37748 + + + @attribute_module + 37 @type_mention - 4147990 - - - @location_default - 43578472 + 4148122 @oblivious - 15641 + 14628 @not_annotated - 4909 + 4544 @annotated - 3216 + 2940 + + + @location_default + 2041597440 @type_parameter_constraints - 1730279 + 831817 @modifier - 2539 + 2321 @property - 4879885 + 4563638 @indexer - 104631 + 95947 @getter - 4950263 + 4629455 @setter - 864799 + 808755 @event - 59075 + 55246 @add_event_accessor - 59075 + 55246 @remove_event_accessor - 59075 + 55246 @operator - 807641 + 807667 @method - 15027104 + 14053498 @constructor - 4401492 + 4116248 @destructor - 6095 + 5571 @local_function @@ -306,35 +322,35 @@ @addressable_field - 8156760 + 7628152 @constant - 2845820 + 2661393 @addressable_local_variable - 353479 + 353413 @local_constant - 1273 + 1244 @local_variable_ref - 413 + 407 @parameter - 27466231 + 25686249 @block_stmt - 470420 + 459924 @expr_stmt - 493564 + 493472 @if_stmt @@ -346,11 +362,11 @@ @while_stmt - 11507 + 11495 @do_stmt - 1261 + 1242 @for_stmt @@ -358,19 +374,19 @@ @foreach_stmt - 20870 + 20404 @break_stmt - 42188 + 42144 @continue_stmt - 6618 + 6471 @goto_stmt - 3586 + 3534 @goto_case_stmt @@ -378,7 +394,7 @@ @throw_stmt - 114825 + 113143 @return_stmt @@ -386,15 +402,15 @@ @yield_stmt - 4545 + 4444 @try_stmt - 14229 + 13912 @checked_stmt - 317 + 312 @unchecked_stmt @@ -402,19 +418,19 @@ @lock_stmt - 6270 + 6130 @using_block_stmt - 7060 + 6942 @var_decl_stmt - 319997 + 319937 @const_decl_stmt - 1273 + 1244 @empty_stmt @@ -422,19 +438,19 @@ @label_stmt - 1347 + 1328 @catch - 19789 + 19348 @case_stmt - 95740 + 95743 @goto_default_stmt - 196 + 192 @unsafe_stmt @@ -442,19 +458,19 @@ @fixed_stmt - 1442 + 1421 @local_function_stmt - 3316 + 3256 @using_decl_stmt - 9176 + 9023 @bool_literal_expr - 585968 + 536220 @char_literal_expr @@ -462,11 +478,11 @@ @int_literal_expr - 3350904 + 3456570 @long_literal_expr - 14560 + 13308 @uint_literal_expr @@ -474,23 +490,23 @@ @ulong_literal_expr - 846 + 773 @float_literal_expr - 91457 + 89289 @double_literal_expr - 34816 + 34809 @string_literal_expr - 1548382 + 1491760 @null_literal_expr - 155826 + 153589 @this_access_expr @@ -498,35 +514,35 @@ @base_access_expr - 30751 + 30237 @local_variable_access_expr - 1030136 + 1029943 @parameter_access_expr - 969866 + 969897 @field_access_expr - 753789 + 753843 @property_access_expr - 1360054 + 1358625 @method_access_expr - 22567 + 22568 @event_access_expr - 8205 + 8204 @indexer_access_expr - 42728 + 42720 @array_access_expr @@ -534,31 +550,31 @@ @type_access_expr - 919474 + 919504 @typeof_expr - 439081 + 410626 @method_invocation_expr - 832863 + 817605 @delegate_invocation_expr - 56440 + 56441 @operator_invocation_expr - 778748 + 778773 @cast_expr - 540196 + 532466 @object_creation_expr - 438904 + 438443 @explicit_delegate_creation_expr @@ -566,15 +582,15 @@ @implicit_delegate_creation_expr - 6692 + 6543 @array_creation_expr - 349823 + 380832 @default_expr - 790758 + 790784 @minus_expr @@ -594,7 +610,7 @@ @pre_incr_expr - 9378 + 9376 @pre_decr_expr @@ -638,11 +654,11 @@ @le_expr - 12909 + 12907 @ge_expr - 8059 + 8057 @eq_expr @@ -650,7 +666,7 @@ @ne_expr - 67609 + 66100 @bit_and_expr @@ -662,11 +678,11 @@ @bit_or_expr - 22325 + 22019 @log_and_expr - 46502 + 46504 @log_or_expr @@ -674,23 +690,23 @@ @is_expr - 13085 + 13082 @as_expr - 14374 + 14372 @null_coalescing_expr - 22567 + 22568 @conditional_expr - 45861 + 45863 @simple_assign_expr - 1592070 + 1590398 @assign_add_expr @@ -702,7 +718,7 @@ @assign_mul_expr - 261 + 257 @assign_or_expr @@ -710,31 +726,31 @@ @object_init_expr - 383016 + 382614 @collection_init_expr - 10286 + 10284 @array_init_expr - 349224 + 380259 @checked_expr - 589 + 580 @unchecked_expr - 1784 + 1758 @constructor_init_expr - 30831 + 30379 @add_event_expr - 2494 + 2490 @remove_event_expr @@ -742,11 +758,11 @@ @local_var_decl_expr - 354490 + 354424 @lambda_expr - 733506 + 733530 @anonymous_method_expr @@ -754,15 +770,15 @@ @dynamic_element_access_expr - 359 + 343 @dynamic_member_access_expr - 3401 + 3249 @nameof_expr - 37520 + 36893 @interpolated_string_expr @@ -774,7 +790,7 @@ @tuple_expr - 5584 + 5491 @define_symbol_expr @@ -782,19 +798,19 @@ @decimal_literal_expr - 131180 + 128071 @plus_expr - 977 + 955 @bit_not_expr - 1296 + 1280 @assign_div_expr - 128 + 126 @assign_rem_expr @@ -810,11 +826,11 @@ @assign_lshift_expr - 148 + 146 @assign_rshift_expr - 289 + 285 @par_expr @@ -830,15 +846,15 @@ @address_of_expr - 1627 + 1604 @sizeof_expr - 1375 + 1355 @await_expr - 43981 + 42016 @unknown_expr @@ -846,55 +862,55 @@ @local_function_invocation_expr - 22567 + 22568 @ref_expr - 694 + 684 @discard_expr - 1634 + 1605 @range_expr - 324 + 318 @index_expr - 94 + 92 @switch_expr - 772 + 760 @recursive_pattern_expr - 2047 + 2016 @property_pattern_expr - 1616 + 1627 @positional_pattern_expr - 425 + 417 @switch_case_expr - 6149 + 6059 @assign_coalesce_expr - 1725 + 1686 @suppress_nullable_warning_expr - 18136 + 17870 @namespace_access_expr - 25 + 24 @lt_pattern_expr @@ -902,27 +918,27 @@ @gt_pattern_expr - 30 + 29 @le_pattern_expr - 30 + 29 @ge_pattern_expr - 39 + 41 @not_pattern_expr - 1384 + 1353 @and_pattern_expr - 123 + 122 @or_pattern_expr - 906 + 890 @function_pointer_invocation_expr @@ -930,7 +946,7 @@ @with_expr - 103 + 101 @xmldtd @@ -938,23 +954,27 @@ @xmlelement - 1042732803 + 953104665 @xmlattribute - 782956405 + 715657357 @xmlnamespace - 3047 + 2785 @xmlcomment - 201474 + 184156 @xmlcharacters - 808542609 + 739044298 + + + @commentblock + 411862 @singlelinecomment @@ -962,16 +982,12 @@ @xmldoccomment - 1212392 + 1211119 @multilinecomment 56989 - - @commentblock - 412295 - @asp_close_tag 13496 @@ -1010,55 +1026,55 @@ @cil_valueorreftype - 7660317 + 7163881 @cil_typeparameter - 1302992 + 1218550 @cil_array_type - 133553 + 124898 @cil_pointer_type - 10695 + 10002 @cil_function_pointer_type - 28676 + 28670 @cil_method - 28926164 + 27051569 @cil_ceq - 683257 + 638977 @cil_cgt - 61114 + 57153 @cil_cgt_un - 260988 + 244075 @cil_clt - 55668 + 52061 @cil_clt_un - 5510 + 5153 @cil_ldftn - 2118023 + 1980762 @cil_ldvirtftn - 37770 + 35322 @cil_ldarg @@ -1066,19 +1082,19 @@ @cil_ldloc - 10804 + 10103 @cil_stloc - 9524 + 8906 @cil_localloc - 1739 + 1713 @cil_endfilter - 12190 + 11142 @cil_unaligned @@ -1086,19 +1102,19 @@ @cil_volatile - 40569 + 37940 @cil_initobj - 698443 + 653180 @cil_constrained - 557145 + 521038 @cil_cpblk - 11913 + 11910 @cil_initblk @@ -1106,103 +1122,103 @@ @cil_rethrow - 52913 + 49484 @cil_sizeof - 21456 + 20065 @cil_readonly - 86 + 82 @cil_stsfld - 1909493 + 1785746 @cil_stobj - 53260 + 49809 @cil_box - 1043087 + 975489 @cil_newarr - 1178159 + 1101807 @cil_ldlen - 418970 + 391818 @cil_ldelema - 524863 + 490848 @cil_ldelem_i1 - 2343 + 2191 @cil_ldelem_u1 - 77038 + 72045 @cil_ldelem_i2 - 6161 + 5762 @cil_ldelem_u2 - 18285 + 16713 @cil_ldelem_i4 - 116262 + 108728 @cil_ldelem_u4 - 96043 + 89818 @cil_ldelem_i8 - 47446 + 44371 @cil_ldelem_i - 169 + 154 @cil_ldelem_r4 - 846 + 791 @cil_ldelem_r8 - 4689 + 4688 @cil_ldelem_ref - 253308 + 236892 @cil_stelem_i - 507 + 464 @cil_stelem_i1 - 55278 + 51696 @cil_stelem_i2 - 67991 + 63585 @cil_stelem_i4 - 127175 + 118933 @cil_stelem_i8 - 22779 + 21303 @cil_stelem_r8 @@ -1210,351 +1226,351 @@ @cil_stelem_ref - 3101385 + 2900396 @cil_ldelem - 26380 + 24671 @cil_stelem - 152948 + 143036 @cil_unbox_any - 167245 + 156406 @cil_conv_ovf_u1 - 607 + 568 @cil_conv_ovf_i4 - 543 + 519 @cil_conv_ovf_i8 - 86 + 81 @cil_ldtoken - 749621 + 701041 @cil_conv_u2 - 27617 + 25827 @cil_conv_u1 - 175033 + 163690 @cil_conv_i - 25187 + 23555 @cil_conv_ovf_i - 1778 + 1663 @cil_add_ovf - 6378 + 5964 @cil_mul_ovf - 932 + 872 @cil_sub_ovf - 2064 + 1972 @cil_endfinally - 1445722 + 1352030 @cil_leave - 508917 + 475936 @cil_leave_s - 2302560 + 2153339 @cil_stind_i - 1258 + 1176 @cil_conv_u - 83850 + 78416 @cil_nop - 1547241 + 1545621 @cil_ldarg_0 - 39364181 + 36813138 @cil_ldarg_1 - 15405506 + 14407133 @cil_ldarg_2 - 5488989 + 5133269 @cil_ldarg_3 - 2376431 + 2222423 @cil_ldloc_0 - 12928909 + 12091036 @cil_ldloc_1 - 6975715 + 6523645 @cil_ldloc_2 - 4951066 + 4630206 @cil_ldloc_3 - 3108306 + 2906869 @cil_stloc_0 - 6417355 + 6001471 @cil_stloc_1 - 3676168 + 3437930 @cil_stloc_2 - 2658095 + 2485834 @cil_stloc_3 - 1822149 + 1704063 @cil_ldarg_s - 2508747 + 2346165 @cil_ldarga_s - 917084 + 857651 @cil_starg_s - 198637 + 185764 @cil_ldloc_s - 10621034 + 9932725 @cil_ldloca_s - 7189474 + 6723552 @cil_stloc_s - 6640335 + 6210000 @cil_ldnull - 5392397 + 4928893 @cil_ldc_i4_m1 - 640279 + 598785 @cil_ldc_i4_0 - 7980533 + 7463345 @cil_ldc_i4_1 - 6322961 + 5913194 @cil_ldc_i4_2 - 1431534 + 1338761 @cil_ldc_i4_3 - 788672 + 737561 @cil_ldc_i4_4 - 724282 + 677344 @cil_ldc_i4_5 - 424936 + 397398 @cil_ldc_i4_6 - 245433 + 229528 @cil_ldc_i4_7 - 218054 + 203923 @cil_ldc_i4_8 - 326615 + 305449 @cil_ldc_i4_s - 3951628 + 3695538 @cil_ldc_i4 - 2083962 + 1948909 @cil_ldc_i8 - 26467 + 24752 @cil_ldc_r4 - 22822 + 21343 @cil_ldc_r8 - 175099 + 163751 @cil_dup - 6812179 + 6370708 @cil_pop - 2850593 + 2665857 @cil_call - 35891726 + 33565720 @cil_calli - 12865 + 12031 @cil_ret - 23260101 + 21752702 @cil_br_s - 4244074 + 3969032 @cil_brfalse_s - 7354008 + 6877423 @cil_brtrue_s - 6868456 + 6423337 @cil_beq_s - 1166965 + 1091338 @cil_bge_s - 222133 + 207737 @cil_bgt_s - 174773 + 163447 @cil_ble_s - 251334 + 235046 @cil_blt_s - 426845 + 399183 @cil_bne_un_s - 1697187 + 1587199 @cil_bge_un_s - 13797 + 12903 @cil_bgt_un_s - 74261 + 69448 @cil_ble_un_s - 72504 + 67805 @cil_blt_un_s - 9849 + 9211 @cil_br - 1052156 + 983970 @cil_brfalse - 700830 + 655411 @cil_brtrue - 590511 + 552243 @cil_beq - 308565 + 288568 @cil_bge - 25643 + 23981 @cil_bgt - 26163 + 24468 @cil_ble - 42348 + 39603 @cil_blt - 69944 + 65411 @cil_bne_un - 154814 + 144781 @cil_bge_un - 2364 + 2211 @cil_bgt_un - 9372 + 8764 @cil_ble_un - 25578 + 23920 @cil_blt_un - 1670 + 1562 @cil_switch - 200330 + 187347 @cil_ldind_i1 @@ -1562,27 +1578,27 @@ @cil_ldind_u1 - 66169 + 61881 @cil_ldind_u2 - 7983 + 7466 @cil_ldind_i4 - 161149 + 150705 @cil_ldind_u4 - 4859 + 4544 @cil_ldind_i8 - 18697 + 18694 @cil_ldind_r4 - 1309 + 1250 @cil_ldind_r8 @@ -1590,187 +1606,187 @@ @cil_ldind_ref - 140300 + 131208 @cil_stind_ref - 239142 + 223644 @cil_stind_i1 - 106413 + 99516 @cil_stind_i2 - 8309 + 7770 @cil_stind_i4 - 324337 + 303318 @cil_stind_i8 - 18419 + 18415 @cil_stind_r4 - 626 + 598 @cil_stind_r8 - 2299 + 2150 @cil_add - 1977549 + 1849392 @cil_sub - 739880 + 691931 @cil_mul - 313316 + 293012 @cil_div - 62481 + 58431 @cil_div_un - 2147 + 2008 @cil_rem - 17811 + 16657 @cil_rem_un - 1844 + 1724 @cil_and - 371762 + 347670 @cil_or - 165878 + 155128 @cil_xor - 141190 + 132040 @cil_shl - 86779 + 81155 @cil_shr - 44539 + 41653 @cil_shr_un - 84349 + 78883 @cil_neg - 21673 + 20268 @cil_not - 14947 + 13979 @cil_conv_i1 - 5597 + 5234 @cil_conv_i2 - 12214 + 11422 @cil_conv_i4 - 392307 + 366883 @cil_conv_i8 - 227036 + 212323 @cil_conv_r4 - 16444 + 15378 @cil_conv_r8 - 37445 + 35018 @cil_conv_u4 - 41372 + 38690 @cil_conv_u8 - 105046 + 98238 @cil_callvirt - 30280746 + 28318366 @cil_cpobj - 37358 + 34937 @cil_ldobj - 120384 + 112582 @cil_ldstr - 8268532 + 7732680 @cil_newobj - 9350996 + 8744994 @cil_castclass - 1325294 + 1239407 @cil_isinst - 2016426 + 1885749 @cil_conv_r_un - 2972 + 2779 @cil_unbox - 7137 + 6675 @cil_throw - 5164341 + 4720440 @cil_ldfld - 16903665 + 15808202 @cil_ldflda - 1433638 + 1340729 @cil_stfld - 8348608 + 7807566 @cil_ldsfld - 7724165 + 7223591 @cil_ldsflda - 22584 + 21120 @cil_break @@ -1782,39 +1798,39 @@ @cil_ldind_i2 - 3818 + 3570 @cil_ldind_i - 26489 + 24772 @cil_conv_ovf_i1_un - 260 + 243 @cil_conv_ovf_i2_un - 216 + 202 @cil_conv_ovf_i4_un - 2104 + 1968 @cil_conv_ovf_i8_un - 339 + 331 @cil_conv_ovf_u1_un - 325 + 304 @cil_conv_ovf_u2_un - 368 + 344 @cil_conv_ovf_u4_un - 195 + 182 @cil_conv_ovf_u8_un @@ -1822,7 +1838,7 @@ @cil_conv_ovf_i_un - 672 + 628 @cil_conv_ovf_u_un @@ -1830,31 +1846,31 @@ @cil_stelem_r4 - 1214 + 1136 @cil_conv_ovf_i1 - 542 + 507 @cil_conv_ovf_i2 - 824 + 770 @cil_conv_ovf_u2 - 954 + 892 @cil_conv_ovf_u4 - 2711 + 2536 @cil_conv_ovf_u8 - 368 + 344 @cil_refanyval - 21 + 20 @cil_ckinfinite @@ -1862,7 +1878,7 @@ @cil_mkrefany - 43 + 40 @cil_conv_ovf_u @@ -1870,15 +1886,15 @@ @cil_add_ovf_un - 1518 + 1420 @cil_mul_ovf_un - 889 + 831 @cil_sub_ovf_un - 260 + 243 @cil_arglist @@ -1894,7 +1910,7 @@ @cil_ldloca - 57860 + 54110 @cil_tail @@ -1906,61 +1922,61 @@ @cil_method_implementation - 19889330 + 18600378 @cil_field - 11684971 + 10927712 @cil_parameter - 55186618 + 51610183 @cil_property - 4409953 + 4124161 @cil_event - 51937 + 48571 @cil_local_variable - 16916551 + 15820254 @cil_catch_handler - 294464 + 275380 @cil_filter_handler - 12190 + 11142 @cil_finally_handler - 1221332 + 1142182 @cil_fault_handler - 224389 + 209847 @cil_attribute - 4315754 + 4036066 compilations - 1622 + 1549 id - 1622 + 1549 cwd - 1622 + 1549 @@ -1974,7 +1990,7 @@ 1 2 - 1622 + 1549 @@ -1990,7 +2006,7 @@ 1 2 - 1622 + 1549 @@ -2000,7 +2016,7 @@ compilation_args - 11261 + 9968 id @@ -2008,11 +2024,11 @@ num - 95 + 92 arg - 1441 + 1430 @@ -2024,43 +2040,43 @@ 12 - 10 - 23 + 7 + 20 20 + + 20 + 21 + 64 + + + 21 + 22 + 154 + + + 22 + 23 + 60 + 23 24 - 64 - - - 24 - 25 - 154 - - - 25 - 26 - 60 - - - 26 - 27 31 - 27 - 29 + 24 + 26 33 - 29 - 33 + 26 + 30 36 - 33 - 96 + 30 + 93 33 @@ -2075,43 +2091,43 @@ 12 - 10 - 23 + 7 + 20 20 + + 20 + 21 + 64 + + + 21 + 22 + 155 + + + 22 + 23 + 60 + 23 24 - 64 - - - 24 - 25 - 155 - - - 25 - 26 - 60 - - - 26 - 27 30 - 27 - 29 + 24 + 26 33 - 29 - 33 + 26 + 30 36 - 33 - 96 + 30 + 93 33 @@ -2147,13 +2163,18 @@ 15 - 70 - 8 + 58 + 7 - 83 + 69 + 412 + 7 + + + 428 430 - 8 + 2 430 @@ -2163,7 +2184,7 @@ 431 432 - 10 + 7 @@ -2179,7 +2200,7 @@ 1 2 - 5 + 3 2 @@ -2194,7 +2215,7 @@ 9 10 - 5 + 4 10 @@ -2203,23 +2224,23 @@ 12 - 20 - 8 + 16 + 7 - 25 - 61 - 8 + 19 + 42 + 7 - 68 - 181 - 8 + 53 + 117 + 7 - 259 + 120 274 - 2 + 5 @@ -2235,12 +2256,12 @@ 1 2 - 1171 + 1170 2 3 - 112 + 108 3 @@ -2250,7 +2271,7 @@ 16 432 - 47 + 41 @@ -2266,7 +2287,7 @@ 1 2 - 1212 + 1201 2 @@ -2291,19 +2312,19 @@ compilation_compiling_files - 37897 + 36203 id - 1622 + 1549 num - 1585 + 1514 file - 37888 + 36195 @@ -2317,72 +2338,72 @@ 1 2 - 73 + 70 3 4 - 92 + 88 4 5 - 82 + 79 5 6 - 138 + 132 6 8 - 129 + 123 8 10 - 119 + 114 10 13 - 119 + 114 13 16 - 147 + 140 16 20 - 129 + 123 20 26 - 138 + 132 26 36 - 147 + 140 36 53 - 129 + 123 55 120 - 129 + 123 138 173 - 46 + 44 @@ -2398,72 +2419,72 @@ 1 2 - 73 + 70 3 4 - 92 + 88 4 5 - 82 + 79 5 6 - 138 + 132 6 8 - 129 + 123 8 10 - 119 + 114 10 13 - 119 + 114 13 16 - 147 + 140 16 20 - 129 + 123 20 26 - 138 + 132 26 36 - 147 + 140 36 53 - 129 + 123 55 120 - 129 + 123 138 173 - 46 + 44 @@ -2479,62 +2500,62 @@ 1 2 - 230 + 220 2 5 - 82 + 79 5 6 - 175 + 167 6 7 - 64 + 61 7 8 - 156 + 149 8 9 - 202 + 193 9 15 - 129 + 123 16 23 - 119 + 114 24 40 - 119 + 114 40 60 - 119 + 114 64 121 - 119 + 114 125 177 - 64 + 61 @@ -2550,62 +2571,62 @@ 1 2 - 230 + 220 2 5 - 82 + 79 5 6 - 175 + 167 6 7 - 64 + 61 7 8 - 156 + 149 8 9 - 202 + 193 9 15 - 129 + 123 16 23 - 119 + 114 24 40 - 119 + 114 40 60 - 119 + 114 64 121 - 119 + 114 125 177 - 64 + 61 @@ -2621,12 +2642,12 @@ 1 2 - 37878 + 36186 2 3 - 9 + 8 @@ -2642,12 +2663,7 @@ 1 2 - 37878 - - - 2 - 3 - 9 + 36195 @@ -2657,19 +2673,19 @@ compilation_referencing_files - 523638 + 500240 id - 1622 + 1549 num - 5558 + 5310 file - 6028 + 5759 @@ -2683,72 +2699,72 @@ 4 289 - 119 + 114 289 292 - 101 + 96 292 294 - 101 + 96 294 297 - 119 + 114 297 300 - 129 + 123 300 315 - 129 + 123 315 317 - 147 + 140 317 322 - 110 + 105 322 325 - 119 + 114 325 329 - 129 + 123 329 353 - 129 + 123 355 366 - 138 + 132 366 564 - 129 + 123 587 604 - 18 + 17 @@ -2764,72 +2780,72 @@ 4 289 - 119 + 114 289 292 - 101 + 96 292 294 - 101 + 96 294 297 - 119 + 114 297 300 - 129 + 123 300 315 - 129 + 123 315 317 - 147 + 140 317 322 - 110 + 105 322 325 - 119 + 114 325 329 - 129 + 123 329 353 - 129 + 123 355 366 - 138 + 132 366 564 - 129 + 123 587 604 - 18 + 17 @@ -2845,42 +2861,42 @@ 1 5 - 442 + 422 5 6 - 27 + 26 6 7 - 1594 + 1523 7 39 - 424 + 405 39 164 - 414 + 396 173 174 - 1189 + 1136 175 176 - 1428 + 1365 176 177 - 36 + 35 @@ -2896,62 +2912,57 @@ 1 5 - 442 + 422 5 6 - 774 + 1136 6 7 - 866 + 431 7 - 16 - 322 + 17 + 475 - 16 - 20 - 433 + 17 + 22 + 457 - 20 - 25 - 442 + 22 + 26 + 422 - 25 - 29 - 433 + 26 + 40 + 422 - 29 - 46 - 424 + 40 + 55 + 431 - 46 - 56 - 424 + 55 + 60 + 466 - 56 - 59 - 451 - - - 59 + 60 63 - 405 + 369 63 - 66 - 138 + 69 + 273 @@ -2967,47 +2978,47 @@ 1 2 - 497 + 475 2 6 - 341 + 325 6 7 - 682 + 651 7 8 - 516 + 493 8 12 - 479 + 457 12 41 - 488 + 466 41 172 - 405 + 387 173 174 - 1152 + 1100 175 176 - 1465 + 1400 @@ -3023,72 +3034,72 @@ 1 2 - 534 + 510 2 5 - 451 + 440 5 6 - 350 + 264 6 7 - 691 + 695 7 - 10 - 497 + 9 + 457 - 10 - 15 - 516 + 9 + 14 + 317 - 15 - 20 - 507 + 14 + 16 + 457 - 20 - 25 - 451 + 16 + 24 + 519 - 25 - 35 - 460 + 24 + 28 + 440 - 35 - 58 - 387 - - - 58 + 28 59 - 276 + 431 59 60 - 350 + 264 60 - 63 - 460 + 61 + 466 - 63 - 67 - 92 + 61 + 64 + 449 + + + 64 + 68 + 44 @@ -3098,23 +3109,23 @@ compilation_time - 11357 + 10849 id - 1622 + 1549 num - 9 + 8 kind - 64 + 61 seconds - 8333 + 7820 @@ -3128,7 +3139,7 @@ 1 2 - 1622 + 1549 @@ -3144,7 +3155,7 @@ 7 8 - 1622 + 1549 @@ -3157,10 +3168,15 @@ 12 + + 6 + 7 + 8 + 7 8 - 1622 + 1541 @@ -3176,7 +3192,7 @@ 176 177 - 9 + 8 @@ -3192,7 +3208,7 @@ 7 8 - 9 + 8 @@ -3206,9 +3222,9 @@ 12 - 904 - 905 - 9 + 888 + 889 + 8 @@ -3224,7 +3240,7 @@ 176 177 - 64 + 61 @@ -3240,7 +3256,7 @@ 1 2 - 64 + 61 @@ -3254,29 +3270,34 @@ 12 - 125 - 126 - 9 + 123 + 124 + 8 - 130 - 131 - 9 + 126 + 127 + 8 - 140 - 141 - 9 + 129 + 130 + 8 - 144 - 145 - 9 + 134 + 135 + 8 + + + 175 + 176 + 8 176 177 - 27 + 17 @@ -3292,22 +3313,22 @@ 1 2 - 6664 + 6226 2 3 - 912 + 827 3 6 - 728 + 695 6 8 - 27 + 70 @@ -3323,7 +3344,7 @@ 1 2 - 8333 + 7820 @@ -3339,17 +3360,17 @@ 1 2 - 6996 + 6684 2 3 - 1179 + 959 3 5 - 156 + 176 @@ -3359,15 +3380,15 @@ diagnostic_for - 25024 + 24565 diagnostic - 25024 + 24565 compilation - 93 + 91 file_number @@ -3375,7 +3396,7 @@ file_number_diagnostic_number - 10016 + 9833 @@ -3389,7 +3410,7 @@ 1 2 - 25024 + 24565 @@ -3405,7 +3426,7 @@ 1 2 - 25024 + 24565 @@ -3421,7 +3442,7 @@ 1 2 - 25024 + 24565 @@ -3518,7 +3539,7 @@ 1 2 - 93 + 91 @@ -3668,12 +3689,12 @@ 2 3 - 9480 + 9306 3 72 - 508 + 499 @@ -3694,12 +3715,12 @@ 2 3 - 9480 + 9306 3 72 - 508 + 499 @@ -3715,7 +3736,7 @@ 1 2 - 10016 + 9833 @@ -3725,11 +3746,11 @@ diagnostics - 25024 + 24565 id - 25024 + 24565 severity @@ -3737,7 +3758,7 @@ error_tag - 65 + 64 error_message @@ -3745,11 +3766,11 @@ full_error_message - 2340 + 2297 location - 12805 + 12570 @@ -3763,7 +3784,7 @@ 1 2 - 25024 + 24565 @@ -3779,7 +3800,7 @@ 1 2 - 25024 + 24565 @@ -3795,7 +3816,7 @@ 1 2 - 25024 + 24565 @@ -3811,7 +3832,7 @@ 1 2 - 25024 + 24565 @@ -3827,7 +3848,7 @@ 1 2 - 25024 + 24565 @@ -4024,7 +4045,7 @@ 1 2 - 65 + 64 @@ -4040,7 +4061,7 @@ 1 2 - 65 + 64 @@ -4056,7 +4077,7 @@ 1 2 - 21 + 20 2 @@ -4265,7 +4286,7 @@ 1 2 - 13 + 12 40 @@ -4393,32 +4414,32 @@ 2 3 - 1269 + 1245 4 5 - 374 + 367 5 7 - 179 + 175 8 11 - 213 + 209 12 23 - 185 + 182 24 5630 - 114 + 112 @@ -4434,7 +4455,7 @@ 1 2 - 2340 + 2297 @@ -4450,7 +4471,7 @@ 1 2 - 2340 + 2297 @@ -4466,7 +4487,7 @@ 1 2 - 2340 + 2297 @@ -4482,32 +4503,32 @@ 1 2 - 1271 + 1248 2 3 - 375 + 368 3 4 - 177 + 174 4 6 - 214 + 210 6 12 - 185 + 182 12 3050 - 114 + 112 @@ -4523,12 +4544,12 @@ 1 2 - 739 + 725 2 3 - 12029 + 11808 3 @@ -4549,7 +4570,7 @@ 1 2 - 12805 + 12570 @@ -4565,7 +4586,7 @@ 1 2 - 12798 + 12564 2 @@ -4586,7 +4607,7 @@ 1 2 - 12805 + 12570 @@ -4602,7 +4623,7 @@ 1 2 - 12798 + 12564 2 @@ -4617,35 +4638,35 @@ extractor_messages - 44691 + 41551 id - 44691 + 41551 severity - 43 + 40 origin - 21 + 20 text - 86 + 60 entity - 282 + 20 location - 65 + 20 stack_trace - 151 + 121 @@ -4659,7 +4680,7 @@ 1 2 - 44691 + 41551 @@ -4675,7 +4696,7 @@ 1 2 - 44691 + 41551 @@ -4691,7 +4712,7 @@ 1 2 - 44691 + 41551 @@ -4707,7 +4728,7 @@ 1 2 - 44691 + 41551 @@ -4723,7 +4744,7 @@ 1 2 - 44691 + 41551 @@ -4739,7 +4760,7 @@ 1 2 - 44691 + 41551 @@ -4755,12 +4776,12 @@ 5 6 - 21 + 20 - 2055 - 2056 - 21 + 2043 + 2044 + 20 @@ -4776,7 +4797,7 @@ 1 2 - 43 + 40 @@ -4792,12 +4813,12 @@ 1 2 - 21 + 20 - 3 - 4 - 21 + 2 + 3 + 20 @@ -4813,12 +4834,7 @@ 1 2 - 21 - - - 13 - 14 - 21 + 40 @@ -4834,12 +4850,7 @@ 1 2 - 21 - - - 3 - 4 - 21 + 40 @@ -4855,12 +4866,12 @@ 1 2 - 21 + 20 - 6 - 7 - 21 + 5 + 6 + 20 @@ -4874,9 +4885,9 @@ 12 - 2060 - 2061 - 21 + 2048 + 2049 + 20 @@ -4892,7 +4903,7 @@ 2 3 - 21 + 20 @@ -4906,9 +4917,9 @@ 12 - 4 - 5 - 21 + 3 + 4 + 20 @@ -4922,9 +4933,9 @@ 12 - 13 - 14 - 21 + 1 + 2 + 20 @@ -4938,9 +4949,9 @@ 12 - 3 - 4 - 21 + 1 + 2 + 20 @@ -4954,9 +4965,9 @@ 12 - 7 - 8 - 21 + 6 + 7 + 20 @@ -4972,22 +4983,17 @@ 2 3 - 21 + 20 5 6 - 21 - - - 12 - 13 - 21 + 20 2041 2042 - 21 + 20 @@ -5003,7 +5009,7 @@ 1 2 - 86 + 60 @@ -5019,7 +5025,7 @@ 1 2 - 86 + 60 @@ -5035,12 +5041,7 @@ 1 2 - 65 - - - 12 - 13 - 21 + 60 @@ -5056,12 +5057,7 @@ 1 2 - 65 - - - 2 - 3 - 21 + 60 @@ -5077,12 +5073,12 @@ 1 2 - 65 + 40 4 5 - 21 + 20 @@ -5095,15 +5091,10 @@ 12 - - 1 - 2 - 260 - 2048 2049 - 21 + 20 @@ -5116,15 +5107,10 @@ 12 - - 1 - 2 - 260 - 2 3 - 21 + 20 @@ -5140,7 +5126,7 @@ 1 2 - 282 + 20 @@ -5153,15 +5139,10 @@ 12 - - 1 - 2 - 260 - 3 4 - 21 + 20 @@ -5177,7 +5158,7 @@ 1 2 - 282 + 20 @@ -5190,15 +5171,10 @@ 12 - - 1 - 2 - 260 - 6 7 - 21 + 20 @@ -5211,20 +5187,10 @@ 12 - - 2 - 3 - 21 - - - 10 - 11 - 21 - 2048 2049 - 21 + 20 @@ -5237,15 +5203,10 @@ 12 - - 1 - 2 - 43 - 2 3 - 21 + 20 @@ -5261,7 +5222,7 @@ 1 2 - 65 + 20 @@ -5274,15 +5235,10 @@ 12 - - 1 - 2 - 43 - 3 4 - 21 + 20 @@ -5298,17 +5254,7 @@ 1 2 - 21 - - - 2 - 3 - 21 - - - 10 - 11 - 21 + 20 @@ -5321,15 +5267,10 @@ 12 - - 1 - 2 - 43 - 6 7 - 21 + 20 @@ -5345,27 +5286,22 @@ 2 3 - 65 + 60 5 6 - 21 - - - 12 - 13 - 21 + 20 24 25 - 21 + 20 2013 2014 - 21 + 20 @@ -5381,7 +5317,7 @@ 1 2 - 151 + 121 @@ -5397,7 +5333,7 @@ 1 2 - 151 + 121 @@ -5413,7 +5349,7 @@ 1 2 - 151 + 121 @@ -5429,12 +5365,7 @@ 1 2 - 130 - - - 12 - 13 - 21 + 121 @@ -5450,12 +5381,7 @@ 1 2 - 130 - - - 2 - 3 - 21 + 121 @@ -5465,19 +5391,19 @@ compilation_finished - 1622 + 1549 id - 1622 + 1549 cpu_seconds - 1438 + 1382 elapsed_seconds - 1622 + 1541 @@ -5491,7 +5417,7 @@ 1 2 - 1622 + 1549 @@ -5507,7 +5433,7 @@ 1 2 - 1622 + 1549 @@ -5523,17 +5449,17 @@ 1 2 - 1272 + 1232 2 3 - 147 + 132 3 4 - 18 + 17 @@ -5549,17 +5475,17 @@ 1 2 - 1272 + 1232 2 3 - 147 + 132 3 4 - 18 + 17 @@ -5575,7 +5501,12 @@ 1 2 - 1622 + 1532 + + + 2 + 3 + 8 @@ -5591,7 +5522,12 @@ 1 2 - 1622 + 1532 + + + 2 + 3 + 8 @@ -5601,15 +5537,15 @@ compilation_assembly - 1622 + 1549 id - 1622 + 1549 assembly - 1622 + 1549 @@ -5623,7 +5559,7 @@ 1 2 - 1622 + 1549 @@ -5639,7 +5575,7 @@ 1 2 - 1622 + 1549 @@ -5647,44 +5583,188 @@ + + 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 + + + + + + sourceLocationPrefix - 169 + 154 prefix - 169 + 154 locations_default - 43578472 + 2041597440 id - 43578472 + 2041597440 file - 16933 + 437178 beginLine - 2347252 + 10083262 beginColumn - 51054 + 255807 endLine - 2511832 + 10387197 endColumn - 58694 + 277008 @@ -5698,7 +5778,7 @@ 1 2 - 43578472 + 2041597440 @@ -5714,7 +5794,7 @@ 1 2 - 43578472 + 2041597440 @@ -5730,7 +5810,7 @@ 1 2 - 43578472 + 2041597440 @@ -5746,7 +5826,7 @@ 1 2 - 43578472 + 2041597440 @@ -5762,7 +5842,7 @@ 1 2 - 43578472 + 2041597440 @@ -5777,154 +5857,73 @@ 1 - 10 - 1315 + 11 + 36057 - 10 - 24 - 1273 + 11 + 17 + 33117 - 24 - 35 - 1358 + 17 + 27 + 32807 - 35 - 47 - 679 - - - 47 - 69 - 1273 - - - 69 - 147 - 1273 - - - 155 - 251 - 1273 - - - 252 - 426 - 1273 - - - 429 - 661 - 1273 - - - 667 - 1078 - 1273 - - - 1114 - 2005 - 1273 - - - 2025 - 3739 - 1273 - - - 3775 - 7820 - 1273 - - - 8401 - 161598 - 848 - - - - - - - file - beginLine - - - 12 - - - 1 - 7 - 1400 - - - 7 - 14 - 1400 - - - 14 - 21 - 1273 - - - 21 - 35 - 1273 - - - 35 - 46 - 1315 - - - 49 + 27 86 - 1315 + 32962 86 - 128 - 1273 + 277 + 32807 - 132 - 214 - 1273 + 281 + 790 + 33271 - 215 - 331 - 1273 + 794 + 1821 + 32962 - 331 - 562 - 1273 + 1825 + 2587 + 33581 - 570 - 987 - 1273 + 2587 + 4571 + 32807 - 1041 - 2108 - 1273 + 4591 + 5270 + 33426 - 2204 - 25961 - 1273 + 5277 + 8353 + 33271 - 47452 - 47453 - 42 + 8361 + 10624 + 33117 + + + 10631 + 43375 + 33271 + + + 43432 + 176183 + 3714 @@ -5932,415 +5931,531 @@ file - beginColumn + beginLine 12 1 - 6 - 1358 - - - 6 - 7 - 1485 - - - 7 - 10 - 1442 - - - 10 - 16 - 1315 - - - 16 - 29 - 1358 - - - 29 - 45 - 1358 - - - 45 - 63 - 1315 - - - 63 - 84 - 1273 - - - 84 - 106 - 1273 - - - 106 - 143 - 1273 - - - 143 - 192 - 1273 - - - 192 - 262 - 1273 - - - 271 - 930 - 933 - - - - - - - file - endLine - - - 12 - - - 1 - 7 - 1400 - - - 7 - 14 - 1273 - - - 14 - 21 - 1273 - - - 21 - 36 - 1273 - - - 37 - 51 - 1273 - - - 51 - 97 - 1315 - - - 102 - 147 - 1273 - - - 148 - 235 - 1273 - - - 242 - 395 - 1273 - - - 396 - 685 - 1273 - - - 690 - 1112 - 1273 - - - 1157 - 2221 - 1273 - - - 2248 - 10652 - 1273 - - - 12843 - 55261 - 212 - - - - - - - file - endColumn - - - 12 - - - 1 - 10 - 1442 - - - 10 - 20 - 1315 - - - 20 - 26 - 1103 - - - 26 - 31 - 1442 - - - 31 - 49 - 1273 - - - 50 - 77 - 1358 - - - 78 - 101 - 1273 - - - 104 - 135 - 1315 - - - 135 - 158 - 1273 - - - 158 - 203 - 1273 - - - 203 - 247 - 1315 - - - 249 - 309 - 1273 - - - 309 - 1038 - 1273 - - - - - - - beginLine - id - - - 12 - - - 1 - 2 - 45919 - - - 2 - 3 - 443706 - - - 3 - 4 - 228240 - - - 4 - 5 - 284303 - - - 5 - 6 - 177015 - - - 6 - 7 - 184060 - - - 7 - 8 - 133727 - - - 8 - 10 - 181217 - - - 10 - 14 - 184782 - - - 14 - 24 - 179647 - - - 24 - 92 - 176251 - - - 92 - 759 - 128379 - - - - - - - beginLine - file - - - 12 - - - 1 - 2 - 1044821 - - - 2 - 3 - 387176 - - - 3 - 4 - 354922 - - - 4 - 6 - 187922 - - - 6 - 14 - 183084 - - - 14 - 105 - 176209 - - - 105 - 346 - 13113 - - - - - - - beginLine - beginColumn - - - 12 - - - 1 - 2 - 333363 - - - 2 - 3 - 461913 - - - 3 - 4 - 150533 - - - 4 - 5 - 355729 - - - 5 - 6 - 148793 - - - 6 - 7 - 169164 - - - 7 9 - 173832 + 39926 9 13 - 185036 + 33117 13 - 24 - 182999 + 21 + 33890 - 24 - 98 - 176251 + 21 + 53 + 33117 - 98 - 155 - 9633 + 53 + 147 + 32807 + + + 147 + 401 + 32807 + + + 407 + 730 + 33117 + + + 730 + 920 + 33271 + + + 920 + 1387 + 33117 + + + 1396 + 1915 + 32807 + + + 1918 + 2849 + 32807 + + + 2878 + 3387 + 33890 + + + 3471 + 51989 + 32498 + + + + + + + file + beginColumn + + + 12 + + + 1 + 5 + 16558 + + + 5 + 6 + 25689 + + + 6 + 7 + 28784 + + + 7 + 9 + 30950 + + + 9 + 14 + 35283 + + + 14 + 42 + 34045 + + + 42 + 81 + 33271 + + + 81 + 131 + 32962 + + + 131 + 165 + 33117 + + + 165 + 191 + 33581 + + + 191 + 229 + 34974 + + + 229 + 289 + 33890 + + + 289 + 418 + 33426 + + + 419 + 940 + 30641 + + + + + + + file + endLine + + + 12 + + + 1 + 10 + 40390 + + + 10 + 15 + 38378 + + + 15 + 26 + 34355 + + + 26 + 78 + 34200 + + + 78 + 204 + 34509 + + + 204 + 593 + 32962 + + + 594 + 1005 + 33736 + + + 1006 + 1324 + 32807 + + + 1327 + 1761 + 32962 + + + 1771 + 2600 + 32962 + + + 2605 + 3623 + 33117 + + + 3645 + 5121 + 32807 + + + 5350 + 60493 + 23986 + + + + + + + file + endColumn + + + 12 + + + 1 + 11 + 40390 + + + 11 + 16 + 32807 + + + 16 + 25 + 34819 + + + 25 + 57 + 32807 + + + 57 + 114 + 32962 + + + 114 + 160 + 33117 + + + 160 + 207 + 32807 + + + 207 + 251 + 32807 + + + 251 + 283 + 34045 + + + 283 + 314 + 34509 + + + 314 + 385 + 33890 + + + 387 + 477 + 33581 + + + 477 + 1048 + 28629 + + + + + + + beginLine + id + + + 12 + + + 1 + 4 + 577694 + + + 4 + 5 + 821894 + + + 5 + 6 + 156765 + + + 6 + 7 + 920008 + + + 7 + 8 + 336124 + + + 8 + 9 + 861821 + + + 9 + 10 + 327612 + + + 10 + 11 + 649499 + + + 11 + 13 + 797598 + + + 13 + 16 + 858261 + + + 16 + 21 + 758291 + + + 21 + 213 + 757827 + + + 213 + 316 + 764326 + + + 316 + 503 + 757053 + + + 503 + 5731 + 738482 + + + + + + + beginLine + file + + + 12 + + + 1 + 2 + 808586 + + + 2 + 3 + 1603399 + + + 3 + 4 + 2816200 + + + 4 + 5 + 577229 + + + 5 + 6 + 519197 + + + 6 + 7 + 543493 + + + 7 + 38 + 756743 + + + 38 + 100 + 789241 + + + 100 + 127 + 764481 + + + 127 + 1047 + 756279 + + + 1047 + 2816 + 148408 + + + + + + + beginLine + beginColumn + + + 12 + + + 1 + 2 + 798062 + + + 2 + 3 + 1266036 + + + 3 + 4 + 895557 + + + 4 + 5 + 1079868 + + + 5 + 6 + 938733 + + + 6 + 7 + 716198 + + + 7 + 8 + 532506 + + + 8 + 11 + 917532 + + + 11 + 20 + 771445 + + + 20 + 31 + 760148 + + + 31 + 55 + 758291 + + + 55 + 282 + 648880 @@ -6356,27 +6471,37 @@ 1 2 - 1025256 + 3378729 2 3 - 731192 + 2989834 3 4 - 240802 + 1089927 4 6 - 188983 + 889367 6 - 241 - 161016 + 8 + 795277 + + + 8 + 15 + 818335 + + + 15 + 583 + 121790 @@ -6392,62 +6517,72 @@ 1 2 - 46004 + 81555 2 3 - 443918 + 966124 3 4 - 245301 + 645321 4 5 - 278573 + 931614 5 6 - 184612 + 744672 6 7 - 183339 + 836751 7 8 - 134066 + 646714 8 - 10 - 178288 + 9 + 599514 - 10 - 14 - 184739 + 9 + 11 + 877451 - 14 - 24 - 184315 + 11 + 15 + 835358 - 24 - 81 - 176591 + 15 + 35 + 779956 - 81 - 223 - 107499 + 35 + 54 + 759993 + + + 54 + 100 + 759684 + + + 100 + 356 + 618549 @@ -6462,63 +6597,73 @@ 1 - 2 - 5771 + 10 + 18106 - 2 - 3 - 9548 + 10 + 13 + 20117 - 3 - 4 - 2249 + 13 + 20 + 12844 - 4 - 5 - 3437 + 20 + 22 + 19498 - 5 - 8 - 4074 + 22 + 33 + 21820 - 8 - 17 - 3862 + 33 + 43 + 19189 - 17 - 80 - 3862 + 43 + 62 + 19963 - 81 - 136 - 3862 + 62 + 116 + 19189 - 137 - 219 - 3862 + 116 + 252 + 19344 - 221 - 737 - 3862 + 252 + 620 + 19189 - 755 - 2313 - 3862 + 620 + 1627 + 19189 - 2317 - 232509 - 2801 + 1633 + 5950 + 19189 + + + 6036 + 28432 + 19189 + + + 28549 + 4117259 + 8975 @@ -6533,53 +6678,73 @@ 1 - 2 - 12392 + 5 + 19498 - 2 - 3 - 8148 + 5 + 10 + 2321 - 3 - 4 - 4116 - - - 4 - 6 - 4498 - - - 6 + 10 11 - 4583 + 26308 11 - 20 - 4031 + 18 + 19344 - 20 - 45 - 3862 + 18 + 23 + 19189 - 46 - 105 - 3862 + 23 + 32 + 19653 - 107 - 164 - 3862 + 32 + 42 + 19653 - 164 - 396 - 1697 + 42 + 63 + 19653 + + + 63 + 102 + 19189 + + + 102 + 177 + 19189 + + + 179 + 355 + 19189 + + + 356 + 731 + 19189 + + + 733 + 1385 + 19189 + + + 1388 + 2816 + 14237 @@ -6595,57 +6760,72 @@ 1 2 - 8105 + 17177 2 3 - 9548 + 27546 3 + 4 + 16249 + + + 4 5 - 4625 + 19808 5 - 9 - 4031 + 6 + 13463 - 9 - 21 - 3904 + 6 + 8 + 19808 - 21 - 85 - 3862 + 8 + 12 + 19963 - 85 - 124 - 3862 + 12 + 24 + 19653 - 124 - 256 - 3862 + 24 + 54 + 19344 - 257 - 986 - 3862 + 54 + 154 + 19189 - 991 - 3019 - 3862 + 155 + 402 + 19189 - 3067 - 45105 - 1527 + 403 + 1587 + 19189 + + + 1599 + 5369 + 19189 + + + 5372 + 57736 + 6035 @@ -6661,57 +6841,72 @@ 1 2 - 8105 + 17177 2 3 - 9548 + 27546 3 + 4 + 16249 + + + 4 5 - 4625 + 19808 5 - 9 - 4031 + 6 + 13463 - 9 - 21 - 3904 + 6 + 8 + 19808 - 21 - 85 - 3862 + 8 + 12 + 19963 - 85 - 124 - 3862 + 12 + 24 + 19653 - 124 - 258 - 3862 + 24 + 54 + 19344 - 266 - 989 - 3862 + 54 + 154 + 19189 - 990 - 3020 - 3862 + 155 + 403 + 19189 - 3062 - 47398 - 1527 + 403 + 1582 + 19189 + + + 1583 + 5378 + 19189 + + + 5426 + 59817 + 6035 @@ -6727,266 +6922,331 @@ 1 2 - 12180 + 40700 2 3 - 7978 + 28784 3 4 - 3437 + 18725 4 + 5 + 17487 + + + 5 + 6 + 13927 + + + 6 + 9 + 21974 + + + 9 + 16 + 19963 + + + 16 + 30 + 19808 + + + 30 + 55 + 19653 + + + 55 + 92 + 19189 + + + 92 + 154 + 19189 + + + 154 + 1011 + 16403 + + + + + + + endLine + id + + + 12 + + + 1 + 3 + 660332 + + + 3 + 4 + 637428 + + + 4 + 6 + 928210 + + + 6 7 - 4710 + 549529 7 + 8 + 604466 + + + 8 + 9 + 502329 + + + 9 + 10 + 513935 + + + 10 + 12 + 922794 + + + 12 + 14 + 729042 + + + 14 + 18 + 952197 + + + 18 + 49 + 783361 + + + 49 + 277 + 783206 + + + 277 + 382 + 779956 + + + 382 + 2205 + 779182 + + + 2207 + 5659 + 261223 + + + + + + + endLine + file + + + 12 + + + 1 + 2 + 378526 + + + 2 + 3 + 1251644 + + + 3 + 4 + 3575111 + + + 4 + 6 + 831799 + + + 6 + 7 + 456058 + + + 7 + 8 + 1014717 + + + 8 + 110 + 785837 + + + 110 + 127 + 786456 + + + 127 + 414 + 779647 + + + 414 + 2816 + 527399 + + + + + + + endLine + beginLine + + + 12 + + + 1 + 2 + 3995885 + + + 2 + 3 + 2716230 + + + 3 + 4 + 1013943 + + + 4 + 6 + 920318 + + + 6 + 8 + 781504 + + + 8 + 15 + 810133 + + + 15 + 24 + 149182 + + + + + + + endLine + beginColumn + + + 12 + + + 1 + 2 + 1063929 + + + 2 + 3 + 842477 + + + 3 + 4 + 1249323 + + + 4 + 5 + 781659 + + + 5 + 6 + 1119330 + + + 6 + 7 + 717591 + + + 7 + 8 + 635417 + + + 8 + 10 + 746530 + + + 10 16 - 3904 + 782897 16 28 - 3946 + 824216 28 45 - 4031 + 801157 45 - 83 - 3989 + 180 + 780266 - 83 - 130 - 3946 - - - 130 - 711 - 2928 - - - - - - - endLine - id - - - 12 - - - 1 - 2 - 430635 - - - 2 - 3 - 200060 - - - 3 - 4 - 280186 - - - 4 - 5 - 226967 - - - 5 - 6 - 220007 - - - 6 - 7 - 168994 - - - 7 - 9 - 228537 - - - 9 - 12 - 196962 - - - 12 - 20 - 203710 - - - 20 - 48 - 190978 - - - 48 - 770 - 164793 - - - - - - - endLine - file - - - 12 - - - 1 - 2 - 1096385 - - - 2 - 3 - 286128 - - - 3 - 4 - 490559 - - - 4 - 6 - 207699 - - - 6 - 12 - 190978 - - - 12 - 61 - 189747 - - - 61 - 338 - 50333 - - - - - - - endLine - beginLine - - - 12 - - - 1 - 2 - 1365580 - - - 2 - 3 - 545986 - - - 3 - 4 - 250521 - - - 4 - 7 - 232017 - - - 7 - 21 - 117727 - - - - - - - endLine - beginColumn - - - 12 - - - 1 - 2 - 483132 - - - 2 - 3 - 397192 - - - 3 - 4 - 212155 - - - 4 - 5 - 272250 - - - 5 - 6 - 210925 - - - 6 - 7 - 150151 - - - 7 - 9 - 200951 - - - 9 - 13 - 204813 - - - 13 - 24 - 191105 - - - 24 - 126 - 188516 - - - 128 - 151 - 636 + 180 + 281 + 42402 @@ -7002,57 +7262,72 @@ 1 2 - 440947 + 724090 2 3 - 207063 + 677045 3 4 - 273863 + 712329 4 5 - 229216 + 855476 5 6 - 219582 + 769433 6 7 - 169716 + 753029 7 + 8 + 670855 + + + 8 9 - 231041 + 570575 9 - 12 - 196538 + 11 + 863368 - 12 - 19 - 189917 + 11 + 15 + 859190 - 19 - 42 - 191360 + 15 + 35 + 788622 - 42 - 229 - 162586 + 35 + 55 + 803634 + + + 55 + 113 + 781968 + + + 113 + 353 + 557576 @@ -7067,63 +7342,73 @@ 1 - 2 - 9251 + 7 + 23677 - 2 - 3 - 9761 - - - 3 - 4 - 3734 - - - 4 - 6 - 4668 - - - 6 + 7 12 - 4456 + 22593 12 - 26 - 4541 + 20 + 16868 - 26 - 142 - 4413 + 20 + 24 + 22593 - 142 - 226 - 4413 + 24 + 35 + 21665 - 227 - 670 - 4413 + 35 + 50 + 20891 - 674 - 3683 - 4413 + 50 + 75 + 21046 - 3685 - 13096 - 4413 + 75 + 170 + 21046 - 13740 - 53117 - 212 + 171 + 403 + 20891 + + + 403 + 1166 + 20891 + + + 1167 + 3859 + 20891 + + + 3870 + 23631 + 20891 + + + 23742 + 104401 + 20891 + + + 111118 + 829586 + 2166 @@ -7138,53 +7423,73 @@ 1 - 2 - 14768 - - - 2 - 3 - 8742 - - - 3 4 - 5262 + 20891 4 - 6 - 4625 + 10 + 9749 - 6 + 10 11 - 4922 + 26462 11 - 22 - 4625 + 18 + 21820 - 22 - 56 - 4413 + 18 + 25 + 22903 - 57 - 131 - 4413 + 25 + 35 + 21355 - 131 - 219 - 4413 + 35 + 52 + 21046 - 219 - 338 - 2503 + 52 + 81 + 21510 + + + 81 + 145 + 21046 + + + 146 + 290 + 20891 + + + 290 + 651 + 20891 + + + 653 + 1351 + 20891 + + + 1361 + 1888 + 20891 + + + 1890 + 2816 + 6654 @@ -7200,57 +7505,72 @@ 1 2 - 9294 + 17487 2 3 - 9761 + 28938 3 4 - 3734 + 12070 4 + 5 + 20736 + + + 5 6 - 4668 + 11606 6 + 8 + 25224 + + + 8 12 - 4456 + 24451 12 - 26 - 4625 + 22 + 20891 - 26 - 117 - 4456 + 22 + 57 + 20891 - 117 - 188 - 4456 + 57 + 166 + 20891 - 188 - 657 - 4413 + 166 + 475 + 20891 - 675 - 3159 - 4413 + 481 + 2060 + 20891 - 3196 - 22236 - 4413 + 2063 + 8513 + 20891 + + + 8521 + 33662 + 11142 @@ -7266,52 +7586,62 @@ 1 2 - 17697 + 54627 2 3 - 7044 + 26308 3 4 - 3437 + 16558 4 + 5 + 16713 + + + 5 7 - 5050 + 23367 7 - 14 - 4413 + 11 + 22748 - 14 - 32 - 4413 + 11 + 21 + 21820 - 32 - 55 - 4625 + 21 + 42 + 21201 - 55 - 80 - 4413 + 42 + 74 + 21355 - 80 - 112 - 4456 + 74 + 104 + 21046 - 112 - 289 - 3140 + 104 + 145 + 22129 + + + 145 + 311 + 9130 @@ -7327,62 +7657,72 @@ 1 2 - 9294 + 17177 2 3 - 9761 + 28938 3 4 - 3734 + 12070 4 + 5 + 20736 + + + 5 6 - 4668 + 11606 6 + 8 + 25534 + + + 8 12 - 4456 + 24451 12 - 26 - 4541 + 22 + 20891 - 26 - 116 - 4413 + 22 + 58 + 21046 - 116 - 186 - 4413 + 58 + 167 + 21046 - 187 - 649 - 4456 + 168 + 490 + 20891 - 651 - 3024 - 4413 + 508 + 2082 + 20891 - 3112 - 7905 - 4413 + 2083 + 8570 + 20891 - 8231 - 22227 - 127 + 8608 + 33661 + 10832 @@ -7450,23 +7790,23 @@ numlines - 1043661954 + 953953951 element_id - 1043661954 + 953953951 num_lines - 243123 + 222225 num_code - 243292 + 222380 num_comment - 18285 + 16713 @@ -7480,7 +7820,7 @@ 1 2 - 1043661954 + 953953951 @@ -7496,7 +7836,7 @@ 1 2 - 1043661954 + 953953951 @@ -7512,7 +7852,7 @@ 1 2 - 1043661954 + 953953951 @@ -7528,47 +7868,47 @@ 1 2 - 67891 + 62056 2 3 - 36062 + 32962 3 4 - 39109 + 35748 4 5 - 17099 + 15630 5 6 - 6433 + 5880 6 7 - 18962 + 17332 7 10 - 22179 + 20272 10 15 - 18623 + 17022 15 4827433 - 16761 + 15320 @@ -7584,12 +7924,12 @@ 1 2 - 237536 + 217118 2 6 - 5587 + 5106 @@ -7605,17 +7945,17 @@ 1 2 - 218743 + 199941 2 8 - 18454 + 16868 8 108 - 5925 + 5416 @@ -7631,47 +7971,47 @@ 1 2 - 68061 + 62210 2 3 - 35554 + 32498 3 4 - 39617 + 36212 4 5 - 16930 + 15475 5 6 - 6433 + 5880 6 7 - 19131 + 17487 7 10 - 22009 + 20117 10 15 - 18454 + 16868 15 4828093 - 17099 + 15630 @@ -7687,12 +8027,12 @@ 1 2 - 239568 + 218975 2 21 - 3724 + 3404 @@ -7708,17 +8048,17 @@ 1 2 - 218743 + 199941 2 8 - 18454 + 16868 8 108 - 6095 + 5571 @@ -7734,57 +8074,57 @@ 1 2 - 1693 + 1547 2 3 - 2370 + 2166 3 4 - 2200 + 2011 4 5 - 3047 + 2785 5 7 - 1185 + 1083 7 9 - 1354 + 1238 9 13 - 1523 + 1392 13 21 - 1523 + 1392 21 79 - 1523 + 1392 84 610 - 1523 + 1392 2344 6158894 - 338 + 309 @@ -7800,52 +8140,52 @@ 1 2 - 2200 + 2011 2 3 - 4571 + 4178 3 4 - 2539 + 2321 4 5 - 1354 + 1238 5 6 - 1523 + 1392 6 9 - 1523 + 1392 9 12 - 1185 + 1083 14 21 - 1523 + 1392 21 47 - 1523 + 1392 48 1415 - 338 + 309 @@ -7861,47 +8201,47 @@ 1 2 - 2200 + 2011 2 3 - 4571 + 4178 3 4 - 2539 + 2321 4 5 - 1354 + 1238 5 6 - 1523 + 1392 6 9 - 1523 + 1392 9 15 - 1523 + 1392 15 25 - 1523 + 1392 29 1414 - 1523 + 1392 @@ -7911,27 +8251,27 @@ assemblies - 30136 + 27546 id - 30136 + 27546 file - 30136 + 27546 fullname - 30136 + 27546 name - 30136 + 27546 version - 2200 + 2011 @@ -7945,7 +8285,7 @@ 1 2 - 30136 + 27546 @@ -7961,7 +8301,7 @@ 1 2 - 30136 + 27546 @@ -7977,7 +8317,7 @@ 1 2 - 30136 + 27546 @@ -7993,7 +8333,7 @@ 1 2 - 30136 + 27546 @@ -8009,7 +8349,7 @@ 1 2 - 30136 + 27546 @@ -8025,7 +8365,7 @@ 1 2 - 30136 + 27546 @@ -8041,7 +8381,7 @@ 1 2 - 30136 + 27546 @@ -8057,7 +8397,7 @@ 1 2 - 30136 + 27546 @@ -8073,7 +8413,7 @@ 1 2 - 30136 + 27546 @@ -8089,7 +8429,7 @@ 1 2 - 30136 + 27546 @@ -8105,7 +8445,7 @@ 1 2 - 30136 + 27546 @@ -8121,7 +8461,7 @@ 1 2 - 30136 + 27546 @@ -8137,7 +8477,7 @@ 1 2 - 30136 + 27546 @@ -8153,7 +8493,7 @@ 1 2 - 30136 + 27546 @@ -8169,7 +8509,7 @@ 1 2 - 30136 + 27546 @@ -8185,7 +8525,7 @@ 1 2 - 30136 + 27546 @@ -8201,27 +8541,27 @@ 1 2 - 1354 + 1238 3 4 - 338 + 309 5 6 - 169 + 154 24 25 - 169 + 154 135 136 - 169 + 154 @@ -8237,27 +8577,27 @@ 1 2 - 1354 + 1238 3 4 - 338 + 309 5 6 - 169 + 154 24 25 - 169 + 154 135 136 - 169 + 154 @@ -8273,27 +8613,27 @@ 1 2 - 1354 + 1238 3 4 - 338 + 309 5 6 - 169 + 154 24 25 - 169 + 154 135 136 - 169 + 154 @@ -8309,27 +8649,27 @@ 1 2 - 1354 + 1238 3 4 - 338 + 309 5 6 - 169 + 154 24 25 - 169 + 154 135 136 - 169 + 154 @@ -8339,15 +8679,15 @@ files - 508426 + 464724 id - 508426 + 464724 name - 508426 + 464724 @@ -8361,7 +8701,7 @@ 1 2 - 508426 + 464724 @@ -8377,7 +8717,7 @@ 1 2 - 508426 + 464724 @@ -8387,15 +8727,15 @@ folders - 484045 + 442439 id - 484045 + 442439 name - 484045 + 442439 @@ -8409,7 +8749,7 @@ 1 2 - 484045 + 442439 @@ -8425,7 +8765,7 @@ 1 2 - 484045 + 442439 @@ -8435,15 +8775,15 @@ containerparent - 992133 + 906854 parent - 484045 + 442439 child - 992133 + 906854 @@ -8457,22 +8797,22 @@ 1 2 - 379753 + 347111 2 3 - 46897 + 42866 3 10 - 31321 + 28629 10 269 - 26073 + 23832 @@ -8488,7 +8828,7 @@ 1 2 - 992133 + 906854 @@ -8498,15 +8838,15 @@ file_extraction_mode - 45539 + 43504 file - 45539 + 43504 mode - 9 + 8 @@ -8520,7 +8860,7 @@ 1 2 - 45539 + 43504 @@ -8536,7 +8876,7 @@ 4940 4941 - 9 + 8 @@ -8546,15 +8886,15 @@ namespaces - 367575 + 343754 id - 367575 + 343754 name - 63392 + 59284 @@ -8568,7 +8908,7 @@ 1 2 - 367575 + 343754 @@ -8584,47 +8924,47 @@ 1 2 - 238 + 223 2 3 - 38812 + 36296 3 4 - 86 + 81 4 5 - 8265 + 7730 5 6 - 21 + 20 6 7 - 6269 + 5863 7 13 - 4772 + 4463 14 115 - 4772 + 4463 123 223 - 151 + 142 @@ -8634,15 +8974,15 @@ namespace_declarations - 32679 + 31219 id - 32679 + 31219 namespace_id - 8213 + 7846 @@ -8656,7 +8996,7 @@ 1 2 - 32679 + 31219 @@ -8672,42 +9012,42 @@ 1 2 - 2940 + 2809 2 3 - 1650 + 1576 3 4 - 875 + 836 4 5 - 617 + 590 5 6 - 516 + 493 6 9 - 672 + 642 9 16 - 626 + 598 16 42 - 313 + 299 @@ -8717,15 +9057,15 @@ namespace_declaration_location - 32679 + 31219 id - 32679 + 31219 loc - 32679 + 31219 @@ -8739,7 +9079,7 @@ 1 2 - 32679 + 31219 @@ -8755,7 +9095,7 @@ 1 2 - 32679 + 31219 @@ -8765,15 +9105,15 @@ parent_namespace - 7241086 + 6771819 child_id - 7241086 + 6771819 namespace_id - 231288 + 216299 @@ -8787,7 +9127,7 @@ 1 2 - 7241086 + 6771819 @@ -8803,52 +9143,52 @@ 1 2 - 60224 + 56321 2 3 - 32954 + 30818 3 4 - 21846 + 20430 4 5 - 15663 + 14648 5 6 - 12973 + 12132 6 8 - 17702 + 16555 8 12 - 20978 + 19619 12 19 - 18353 + 17164 19 44 - 17507 + 16373 44 84811 - 13081 + 12234 @@ -8926,26 +9266,26 @@ using_global - 3170 + 3117 id - 3170 + 3117 using_namespace_directives - 170883 + 163247 id - 170883 + 163247 namespace_id - 8831 + 8436 @@ -8959,7 +9299,7 @@ 1 2 - 170883 + 163247 @@ -8975,47 +9315,47 @@ 1 2 - 3549 + 3390 2 3 - 1133 + 1083 3 4 - 543 + 519 4 5 - 424 + 405 5 7 - 672 + 642 7 12 - 765 + 730 12 26 - 672 + 642 26 80 - 663 + 634 81 1686 - 405 + 387 @@ -9025,15 +9365,15 @@ using_static_directives - 483 + 474 id - 483 + 474 type_id - 65 + 64 @@ -9047,7 +9387,7 @@ 1 2 - 483 + 474 @@ -9063,7 +9403,7 @@ 2 3 - 34 + 33 3 @@ -9103,15 +9443,15 @@ using_directive_location - 171003 + 163362 id - 171003 + 163362 loc - 170920 + 163283 @@ -9125,7 +9465,7 @@ 1 2 - 171003 + 163362 @@ -9141,12 +9481,12 @@ 1 2 - 170837 + 163203 2 3 - 82 + 79 @@ -10222,15 +10562,15 @@ directive_regions - 25505 + 24936 id - 25505 + 24936 name - 12319 + 12044 @@ -10244,7 +10584,7 @@ 1 2 - 25505 + 24936 @@ -10260,22 +10600,22 @@ 1 2 - 10172 + 9945 2 3 - 999 + 977 3 14 - 925 + 904 14 111 - 222 + 217 @@ -10285,15 +10625,15 @@ directive_endregions - 25505 + 24936 id - 25505 + 24936 start - 25505 + 24936 @@ -10307,7 +10647,7 @@ 1 2 - 25505 + 24936 @@ -10323,7 +10663,7 @@ 1 2 - 25505 + 24936 @@ -10806,11 +11146,11 @@ directive_nullables - 3382 + 3320 id - 3382 + 3320 setting @@ -10832,7 +11172,7 @@ 1 2 - 3382 + 3320 @@ -10848,7 +11188,7 @@ 1 2 - 3382 + 3320 @@ -11321,11 +11661,11 @@ pragma_warnings - 1873 + 1831 id - 1873 + 1831 kind @@ -11343,7 +11683,7 @@ 1 2 - 1873 + 1831 @@ -11374,19 +11714,19 @@ pragma_warning_error_codes - 2361 + 2309 id - 1828 + 1787 errorCode - 170 + 166 index - 51 + 50 @@ -11400,12 +11740,12 @@ 1 2 - 1369 + 1339 2 3 - 444 + 434 7 @@ -11426,12 +11766,12 @@ 1 2 - 1369 + 1339 2 3 - 444 + 434 7 @@ -11452,7 +11792,7 @@ 2 3 - 74 + 72 3 @@ -11462,7 +11802,7 @@ 4 5 - 22 + 21 6 @@ -11503,7 +11843,7 @@ 1 2 - 162 + 159 2 @@ -11524,7 +11864,7 @@ 2 3 - 37 + 36 62 @@ -11550,7 +11890,7 @@ 1 2 - 37 + 36 2 @@ -11570,15 +11910,15 @@ preprocessor_directive_location - 62641 + 61243 id - 62641 + 61243 loc - 62641 + 61243 @@ -11592,7 +11932,7 @@ 1 2 - 62641 + 61243 @@ -11608,7 +11948,7 @@ 1 2 - 62641 + 61243 @@ -11726,11 +12066,11 @@ preprocessor_directive_active - 62641 + 61243 id - 62641 + 61243 active @@ -11748,7 +12088,7 @@ 1 2 - 62641 + 61243 @@ -11779,19 +12119,19 @@ types - 8463395 + 7914915 id - 8463395 + 7914915 kind - 650 + 608 name - 2569124 + 2402629 @@ -11805,7 +12145,7 @@ 1 2 - 8463395 + 7914915 @@ -11821,7 +12161,7 @@ 1 2 - 8463395 + 7914915 @@ -11837,37 +12177,37 @@ 1 2 - 412 + 385 7 452 - 43 + 40 770 1283 - 43 + 40 3955 6911 - 43 + 40 26663 31892 - 43 + 40 33571 109926 - 43 + 40 174666 174667 - 21 + 20 @@ -11883,32 +12223,32 @@ 1 2 - 433 + 405 7 437 - 43 + 40 747 1236 - 43 + 40 1670 2545 - 43 + 40 6038 9241 - 43 + 40 11743 85767 - 43 + 40 @@ -11924,17 +12264,17 @@ 1 2 - 2307983 + 2158412 2 5 - 201892 + 188808 5 21597 - 59248 + 55408 @@ -11950,12 +12290,12 @@ 1 2 - 2548124 + 2382989 2 5 - 21000 + 19639 @@ -11965,15 +12305,15 @@ typerefs - 3537560 + 3308304 id - 3537560 + 3308304 name - 2476075 + 2315610 @@ -11987,7 +12327,7 @@ 1 2 - 3537560 + 3308304 @@ -12003,12 +12343,12 @@ 1 2 - 2298307 + 2149363 2 11806 - 177767 + 166247 @@ -12018,15 +12358,15 @@ typeref_type - 3508077 + 3280732 id - 3508077 + 3280732 typeId - 3508077 + 3280732 @@ -12040,7 +12380,7 @@ 1 2 - 3508077 + 3280732 @@ -12056,7 +12396,7 @@ 1 2 - 3508077 + 3280732 @@ -12066,23 +12406,23 @@ array_element_type - 85803 + 80242 array - 85803 + 80242 dimension - 65 + 60 rank - 65 + 60 element - 85521 + 79978 @@ -12096,7 +12436,7 @@ 1 2 - 85803 + 80242 @@ -12112,7 +12452,7 @@ 1 2 - 85803 + 80242 @@ -12128,7 +12468,7 @@ 1 2 - 85803 + 80242 @@ -12144,17 +12484,17 @@ 3 4 - 21 + 20 51 52 - 21 + 20 3901 3902 - 21 + 20 @@ -12170,12 +12510,12 @@ 1 2 - 43 + 40 3 4 - 21 + 20 @@ -12191,17 +12531,17 @@ 3 4 - 21 + 20 51 52 - 21 + 20 3888 3889 - 21 + 20 @@ -12217,17 +12557,17 @@ 3 4 - 21 + 20 17 18 - 21 + 20 3935 3936 - 21 + 20 @@ -12243,12 +12583,12 @@ 1 2 - 43 + 40 3 4 - 21 + 20 @@ -12264,17 +12604,17 @@ 3 4 - 21 + 20 17 18 - 21 + 20 3935 3936 - 21 + 20 @@ -12290,12 +12630,12 @@ 1 2 - 85282 + 79755 2 4 - 238 + 223 @@ -12311,7 +12651,7 @@ 1 2 - 85521 + 79978 @@ -12327,12 +12667,12 @@ 1 2 - 85282 + 79755 2 4 - 238 + 223 @@ -12342,15 +12682,15 @@ nullable_underlying_type - 16705 + 15622 nullable - 16705 + 15622 underlying - 16705 + 15622 @@ -12364,7 +12704,7 @@ 1 2 - 16705 + 15622 @@ -12380,7 +12720,7 @@ 1 2 - 16705 + 15622 @@ -12390,15 +12730,15 @@ pointer_referent_type - 9784 + 9150 pointer - 9784 + 9150 referent - 9784 + 9150 @@ -12412,7 +12752,7 @@ 1 2 - 9784 + 9150 @@ -12428,7 +12768,7 @@ 1 2 - 9784 + 9150 @@ -12438,15 +12778,15 @@ enum_underlying_type - 149911 + 140196 enum_id - 149911 + 140196 underlying_type_id - 173 + 162 @@ -12460,7 +12800,7 @@ 1 2 - 149911 + 140196 @@ -12476,42 +12816,42 @@ 5 6 - 21 + 20 9 10 - 21 + 20 17 18 - 21 + 20 49 50 - 21 + 20 103 104 - 21 + 20 315 316 - 21 + 20 397 398 - 21 + 20 6015 6016 - 21 + 20 @@ -12521,15 +12861,15 @@ delegate_return_type - 2249822 + 2249894 delegate_id - 2249822 + 2249894 return_type_id - 801529 + 801555 @@ -12543,7 +12883,7 @@ 1 2 - 2249822 + 2249894 @@ -12559,12 +12899,12 @@ 1 2 - 730408 + 730431 2 30 - 60308 + 60310 30 @@ -12579,15 +12919,15 @@ function_pointer_return_type - 27738 + 27733 function_pointer_id - 27738 + 27733 return_type_id - 5875 + 5874 @@ -12601,7 +12941,7 @@ 1 2 - 27738 + 27733 @@ -12617,17 +12957,17 @@ 1 2 - 1685 + 1684 2 3 - 1934 + 1933 3 4 - 1392 + 1391 4 @@ -12647,15 +12987,15 @@ extend - 3548520 + 3548633 sub - 3547409 + 3547522 super - 9552 + 9553 @@ -12669,7 +13009,7 @@ 1 2 - 3546298 + 3546411 2 @@ -12730,26 +13070,26 @@ anonymous_types - 4382 + 4308 id - 4382 + 4308 implement - 9498651 + 8883080 sub - 3317488 + 3102494 super - 2026883 + 1895529 @@ -12763,32 +13103,32 @@ 1 2 - 1125940 + 1052972 2 3 - 905520 + 846837 3 4 - 620559 + 580343 4 6 - 270035 + 252535 6 9 - 249056 + 232916 9 32 - 146375 + 136889 @@ -12804,27 +13144,27 @@ 1 2 - 973056 + 909996 2 3 - 598994 + 560175 3 5 - 173667 + 162412 5 6 - 158242 + 147987 6 90747 - 122922 + 114956 @@ -12834,15 +13174,15 @@ type_location - 4526758 + 4233396 id - 4460394 + 4171332 loc - 11194 + 10469 @@ -12856,12 +13196,12 @@ 1 2 - 4438113 + 4150496 2 495 - 22280 + 20836 @@ -12877,57 +13217,57 @@ 1 2 - 2842 + 2657 2 11 - 867 + 811 11 23 - 846 + 791 23 46 - 846 + 791 46 79 - 911 + 852 79 125 - 846 + 791 125 196 - 846 + 791 196 380 - 846 + 791 382 634 - 846 + 791 650 1782 - 846 + 791 1787 11861 - 650 + 608 @@ -12937,15 +13277,15 @@ tuple_underlying_type - 27812 + 26010 tuple - 27812 + 26010 struct - 27812 + 26010 @@ -12959,7 +13299,7 @@ 1 2 - 27812 + 26010 @@ -12975,7 +13315,7 @@ 1 2 - 27812 + 26010 @@ -12985,19 +13325,19 @@ tuple_element - 149835 + 136956 tuple - 24210 + 22129 index - 3555 + 3249 field - 149835 + 136956 @@ -13011,57 +13351,57 @@ 1 2 - 1523 + 1392 2 3 - 7788 + 7118 3 4 - 2031 + 1857 4 5 - 1523 + 1392 5 6 - 1354 + 1238 6 7 - 1354 + 1238 7 9 - 2200 + 2011 9 12 - 2031 + 1857 12 15 - 2031 + 1857 15 21 - 2031 + 1857 21 22 - 338 + 309 @@ -13077,57 +13417,57 @@ 1 2 - 1523 + 1392 2 3 - 7788 + 7118 3 4 - 2031 + 1857 4 5 - 1523 + 1392 5 6 - 1354 + 1238 6 7 - 1354 + 1238 7 9 - 2200 + 2011 9 12 - 2031 + 1857 12 15 - 2031 + 1857 15 21 - 2031 + 1857 21 22 - 338 + 309 @@ -13143,107 +13483,107 @@ 2 3 - 169 + 154 4 5 - 169 + 154 6 7 - 169 + 154 8 9 - 169 + 154 10 11 - 169 + 154 12 13 - 169 + 154 14 15 - 169 + 154 18 19 - 169 + 154 22 23 - 169 + 154 26 27 - 169 + 154 30 31 - 169 + 154 34 35 - 169 + 154 38 39 - 169 + 154 43 44 - 169 + 154 51 52 - 169 + 154 59 60 - 169 + 154 67 68 - 169 + 154 76 77 - 169 + 154 88 89 - 169 + 154 134 135 - 169 + 154 143 144 - 169 + 154 @@ -13259,107 +13599,107 @@ 2 3 - 169 + 154 4 5 - 169 + 154 6 7 - 169 + 154 8 9 - 169 + 154 10 11 - 169 + 154 12 13 - 169 + 154 14 15 - 169 + 154 18 19 - 169 + 154 22 23 - 169 + 154 26 27 - 169 + 154 30 31 - 169 + 154 34 35 - 169 + 154 38 39 - 169 + 154 43 44 - 169 + 154 51 52 - 169 + 154 59 60 - 169 + 154 67 68 - 169 + 154 76 77 - 169 + 154 88 89 - 169 + 154 134 135 - 169 + 154 143 144 - 169 + 154 @@ -13375,7 +13715,7 @@ 1 2 - 149835 + 136956 @@ -13391,7 +13731,7 @@ 1 2 - 149835 + 136956 @@ -13401,22 +13741,42 @@ attributes - 10551328 + 9999415 id - 10551328 + 9999415 + + + kind + 60 type_id - 13602 + 12721 target - 9250896 + 8739455 + + id + kind + + + 12 + + + 1 + 2 + 9999415 + + + + + id type_id @@ -13427,7 +13787,7 @@ 1 2 - 10551328 + 9999415 @@ -13443,7 +13803,85 @@ 1 2 - 10551328 + 9999415 + + + + + + + kind + id + + + 12 + + + 31 + 32 + 20 + + + 6500 + 6501 + 20 + + + 486321 + 486322 + 20 + + + + + + + kind + type_id + + + 12 + + + 6 + 7 + 20 + + + 11 + 12 + 20 + + + 625 + 626 + 20 + + + + + + + kind + target + + + 12 + + + 3 + 4 + 20 + + + 6229 + 6230 + 20 + + + 426407 + 426408 + 20 @@ -13459,67 +13897,88 @@ 1 2 - 1236 + 1156 2 3 - 1128 + 1034 3 4 - 802 + 750 4 6 - 1106 + 1034 6 9 - 1193 + 1095 9 14 - 1193 + 1115 14 23 - 1041 + 994 23 40 - 1193 + 1115 40 86 - 1063 + 994 88 - 162 - 1041 + 161 + 973 - 170 - 386 - 1041 + 161 + 380 + 973 - 387 - 1501 - 1041 + 385 + 1475 + 973 - 1536 + 1500 152697 - 520 + 507 + + + + + + + type_id + kind + + + 12 + + + 1 + 2 + 12416 + + + 2 + 3 + 304 @@ -13535,67 +13994,67 @@ 1 2 - 1453 + 1359 2 3 - 1063 + 973 3 4 - 846 + 791 4 6 - 1149 + 1075 6 9 - 1258 + 1156 9 14 - 1106 + 1034 14 25 - 1084 + 1034 25 40 - 1041 + 973 40 78 - 1041 + 973 78 - 153 - 1084 + 150 + 973 - 160 - 387 - 1041 + 152 + 380 + 994 - 387 - 1970 - 1041 + 385 + 1756 + 973 - 2016 + 1969 151705 - 390 + 405 @@ -13611,12 +14070,33 @@ 1 2 - 8608447 + 8100091 2 3520 - 642449 + 639363 + + + + + + + target + kind + + + 12 + + + 1 + 2 + 8701149 + + + 2 + 3 + 38305 @@ -13632,12 +14112,12 @@ 1 2 - 8733887 + 8217381 2 29 - 517009 + 522073 @@ -13647,15 +14127,15 @@ attribute_location - 10552695 + 10000693 id - 10551328 + 9999415 loc - 11867 + 11098 @@ -13669,12 +14149,12 @@ 1 2 - 10550244 + 9998400 2 4 - 1084 + 1014 @@ -13690,67 +14170,67 @@ 1 2 - 1084 + 1014 8 10 - 108 + 101 10 11 - 1844 + 1724 11 18 - 976 + 912 18 34 - 997 + 933 35 61 - 911 + 852 61 - 123 - 911 + 125 + 872 - 124 - 210 - 911 + 125 + 215 + 852 - 214 - 350 - 911 + 215 + 360 + 852 - 359 - 806 - 911 + 370 + 818 + 852 - 812 - 1470 - 911 + 823 + 1495 + 852 - 1472 - 5712 - 911 + 1505 + 5965 + 852 - 5961 - 22730 - 477 + 6304 + 22785 + 426 @@ -13760,19 +14240,19 @@ type_mention - 4147990 + 4148122 id - 4147990 + 4148122 type_id - 129976 + 129980 parent - 1453785 + 1453831 @@ -13786,7 +14266,7 @@ 1 2 - 4147990 + 4148122 @@ -13802,7 +14282,7 @@ 1 2 - 4147990 + 4148122 @@ -13818,12 +14298,12 @@ 1 2 - 38232 + 38233 2 3 - 44408 + 44409 3 @@ -13859,17 +14339,17 @@ 1 2 - 69689 + 69692 2 3 - 23721 + 23722 3 4 - 10599 + 10600 4 @@ -13900,22 +14380,22 @@ 1 2 - 1183979 + 1184017 2 3 - 142435 + 142440 3 31 - 116320 + 116324 31 33 - 11048 + 11049 @@ -13931,17 +14411,17 @@ 1 2 - 1271407 + 1271448 2 22 - 114205 + 114208 22 33 - 68172 + 68174 @@ -13951,15 +14431,15 @@ type_mention_location - 4147990 + 4148122 id - 4147990 + 4148122 loc - 3077659 + 3077757 @@ -13973,7 +14453,7 @@ 1 2 - 4147990 + 4148122 @@ -13989,17 +14469,17 @@ 1 2 - 2705125 + 2705211 2 3 - 359177 + 359188 3 97 - 13356 + 13357 @@ -14009,11 +14489,11 @@ type_annotation - 1491205 + 1491252 id - 1491205 + 1491252 annotation @@ -14031,7 +14511,7 @@ 1 2 - 1491205 + 1491252 @@ -14062,15 +14542,15 @@ nullability - 21087 + 19720 nullability - 21087 + 19720 kind - 65 + 60 @@ -14084,7 +14564,7 @@ 1 2 - 21087 + 19720 @@ -14100,17 +14580,17 @@ 27 28 - 21 + 20 224 225 - 21 + 20 721 722 - 21 + 20 @@ -14120,19 +14600,19 @@ nullability_parent - 49073 + 45893 nullability - 6812 + 6370 index - 238 + 223 parent - 21022 + 19659 @@ -14146,22 +14626,22 @@ 1 2 - 4577 + 4280 2 3 - 1583 + 1481 3 5 - 542 + 507 5 12 - 108 + 101 @@ -14177,32 +14657,32 @@ 1 2 - 3449 + 3225 2 3 - 1323 + 1237 3 4 - 629 + 588 4 5 - 477 + 446 5 9 - 520 + 486 9 387 - 412 + 385 @@ -14218,47 +14698,47 @@ 1 2 - 21 + 20 2 3 - 65 + 60 3 4 - 21 + 20 5 6 - 21 + 20 17 18 - 21 + 20 18 19 - 21 + 20 40 41 - 21 + 20 125 126 - 21 + 20 263 264 - 21 + 20 @@ -14274,57 +14754,57 @@ 2 3 - 21 + 20 4 5 - 21 + 20 5 6 - 21 + 20 22 23 - 21 + 20 27 28 - 21 + 20 34 35 - 21 + 20 54 55 - 21 + 20 124 125 - 21 + 20 265 266 - 21 + 20 756 757 - 21 + 20 969 970 - 21 + 20 @@ -14340,17 +14820,17 @@ 1 2 - 5402 + 5051 2 3 - 13863 + 12964 3 4 - 1757 + 1643 @@ -14366,27 +14846,27 @@ 1 2 - 4621 + 4321 2 3 - 10652 + 9961 3 4 - 3058 + 2860 4 5 - 1518 + 1420 5 12 - 1171 + 1095 @@ -14396,15 +14876,15 @@ type_nullability - 32568402 + 30508409 id - 32566081 + 30506238 nullability - 20653 + 19315 @@ -14418,12 +14898,12 @@ 1 2 - 32563846 + 30504148 2 4 - 2234 + 2089 @@ -14439,47 +14919,47 @@ 1 2 - 7441 + 6959 2 3 - 2711 + 2536 3 4 - 2126 + 1988 4 5 - 1128 + 1055 5 7 - 1757 + 1643 7 11 - 1583 + 1481 11 30 - 1627 + 1521 30 173 - 1562 + 1460 189 1342267 - 715 + 669 @@ -14489,11 +14969,11 @@ expr_flowstate - 3848496 + 3792768 id - 3848496 + 3792768 state @@ -14511,7 +14991,7 @@ 1 2 - 3848496 + 3792768 @@ -14525,13 +15005,13 @@ 12 - 210406 - 210407 + 210400 + 210401 1 - 2276592 - 2276593 + 2277023 + 2277024 1 @@ -14542,11 +15022,11 @@ type_parameters - 830422 + 830449 id - 830422 + 830449 index @@ -14554,7 +15034,7 @@ generic_id - 796400 + 796426 variance @@ -14572,7 +15052,7 @@ 1 2 - 830422 + 830449 @@ -14588,7 +15068,7 @@ 1 2 - 830422 + 830449 @@ -14604,7 +15084,7 @@ 1 2 - 830422 + 830449 @@ -14828,7 +15308,7 @@ 1 2 - 789861 + 789886 2 @@ -14849,7 +15329,7 @@ 1 2 - 789861 + 789886 2 @@ -14870,7 +15350,7 @@ 1 2 - 796037 + 796062 2 @@ -14963,11 +15443,11 @@ type_arguments - 32946623 + 32947672 id - 851708 + 851735 index @@ -14975,7 +15455,7 @@ constructed_id - 3572648 + 3572762 @@ -14989,17 +15469,17 @@ 1 2 - 100891 + 100894 2 3 - 720385 + 720408 3 6 - 30431 + 30432 @@ -15020,17 +15500,17 @@ 2 3 - 721261 + 721284 3 28 - 64154 + 64156 28 3541 - 52037 + 52039 @@ -15228,37 +15708,37 @@ 1 2 - 146923 + 146928 2 3 - 2211291 + 2211361 3 20 - 305494 + 305504 20 25 - 281238 + 281247 25 29 - 321415 + 321425 29 32 - 283717 + 283726 32 33 - 22567 + 22568 @@ -15274,37 +15754,37 @@ 1 2 - 146389 + 146394 2 3 - 2211334 + 2211404 3 20 - 305985 + 305995 20 25 - 281238 + 281247 25 29 - 321415 + 321425 29 32 - 283717 + 283726 32 33 - 22567 + 22568 @@ -15314,15 +15794,15 @@ constructed_generic - 3862918 + 3612577 constructed - 3862918 + 3612577 generic - 79576 + 74419 @@ -15336,7 +15816,7 @@ 1 2 - 3862918 + 3612577 @@ -15352,47 +15832,47 @@ 1 2 - 24840 + 23230 2 3 - 15446 + 14445 3 4 - 7810 + 7303 4 5 - 5076 + 4747 5 7 - 5640 + 5275 7 11 - 6269 + 5863 11 22 - 6009 + 5620 22 148 - 5987 + 5599 149 19826 - 2494 + 2333 @@ -15402,15 +15882,15 @@ type_parameter_constraints - 1730279 + 831817 id - 1730279 + 831817 param_id - 831790 + 831817 @@ -15424,7 +15904,7 @@ 1 2 - 1730279 + 831817 @@ -15440,17 +15920,7 @@ 1 2 - 11924 - - - 2 - 3 - 777765 - - - 3 - 41 - 42100 + 831817 @@ -15496,11 +15966,11 @@ general_type_parameter_constraints - 283388 + 198773 id - 281228 + 198057 kind @@ -15518,12 +15988,12 @@ 1 2 - 279068 + 197342 2 3 - 2160 + 715 @@ -15537,28 +16007,28 @@ 12 - 10 - 11 + 8 + 9 2 - 137 - 138 + 36 + 37 2 - 2527 - 2528 + 593 + 594 2 - 4084 - 4085 + 1061 + 1062 2 - 89405 - 89406 + 66899 + 66900 2 @@ -15569,15 +16039,15 @@ specific_type_parameter_constraints - 260902 + 207575 id - 254827 + 202827 base_id - 30980 + 28972 @@ -15591,12 +16061,12 @@ 1 2 - 250206 + 199358 2 9 - 4621 + 3469 @@ -15612,37 +16082,37 @@ 1 2 - 15945 + 17022 2 3 - 3341 + 3124 3 4 - 3145 + 1866 4 6 - 2364 + 2130 6 - 10 - 2581 + 11 + 2394 - 10 - 27 - 2364 + 11 + 76 + 2211 - 27 - 2734 - 1236 + 82 + 2440 + 223 @@ -15652,19 +16122,19 @@ specific_type_parameter_nullability - 48843 + 29712 id - 48606 + 29712 base_id - 1375 + 15630 nullability - 23 + 464 @@ -15678,12 +16148,7 @@ 1 2 - 48369 - - - 2 - 3 - 237 + 29712 @@ -15699,7 +16164,7 @@ 1 2 - 48606 + 29712 @@ -15715,67 +16180,17 @@ 1 2 - 129 + 13463 2 - 3 - 280 - - - 3 - 4 - 3 - - - 4 - 5 - 129 - - - 5 - 8 - 75 + 7 + 1238 8 - 9 - 139 - - - 9 - 11 - 122 - - - 11 - 16 - 77 - - - 16 - 20 - 85 - - - 20 - 27 - 110 - - - 28 - 51 - 108 - - - 52 - 691 - 104 - - - 696 - 4144 - 9 + 25 + 928 @@ -15791,12 +16206,12 @@ 1 2 - 1340 + 15475 2 3 - 35 + 154 @@ -15809,75 +16224,20 @@ 12 + + 1 + 2 + 154 + 2 3 - 2 + 154 - 8 - 9 - 5 - - - 10 - 11 - 1 - - - 12 - 13 - 1 - - - 16 - 17 - 1 - - - 20 - 21 - 1 - - - 22 - 23 - 1 - - - 28 - 29 - 1 - - - 52 - 53 - 1 - - - 75 - 76 - 1 - - - 90 - 91 - 1 - - - 197 - 198 - 1 - - - 434 - 435 - 1 - - - 35892 - 35893 - 1 + 189 + 190 + 154 @@ -15893,47 +16253,17 @@ 1 2 - 11 + 154 2 3 - 1 + 154 - 3 - 4 - 1 - - - 5 - 6 - 2 - - - 6 - 7 - 1 - - - 9 - 10 - 1 - - - 11 - 12 - 1 - - - 42 - 43 - 1 - - - 979 - 980 - 1 + 99 + 100 + 154 @@ -15943,11 +16273,11 @@ function_pointer_calling_conventions - 27738 + 27733 id - 27738 + 27733 kind @@ -15965,7 +16295,7 @@ 1 2 - 27738 + 27733 @@ -16076,15 +16406,15 @@ modifiers - 2539 + 2321 id - 2539 + 2321 name - 2539 + 2321 @@ -16098,7 +16428,7 @@ 1 2 - 2539 + 2321 @@ -16114,7 +16444,7 @@ 1 2 - 2539 + 2321 @@ -16124,15 +16454,15 @@ has_modifiers - 74006502 + 69210665 id - 48974257 + 45800665 mod_id - 303 + 284 @@ -16146,17 +16476,17 @@ 1 2 - 25150112 + 23520472 2 3 - 22619170 + 21153308 3 5 - 1204974 + 1126884 @@ -16172,72 +16502,72 @@ 123 124 - 21 + 20 426 427 - 21 + 20 2653 2654 - 21 + 20 106912 106913 - 21 + 20 118655 118656 - 21 + 20 131175 131176 - 21 + 20 137005 137006 - 21 + 20 137710 137711 - 21 + 20 152918 152919 - 21 + 20 201905 201906 - 21 + 20 244876 244877 - 21 + 20 278805 278806 - 21 + 20 - 451153 - 451154 - 21 + 451165 + 451166 + 20 1446933 1446934 - 21 + 20 @@ -16247,26 +16577,26 @@ compiler_generated - 786249 + 786274 id - 786249 + 786274 exprorstmt_name - 5183 + 5108 parent_id - 5183 + 5108 name - 558 + 550 @@ -16280,7 +16610,7 @@ 1 2 - 5183 + 5108 @@ -16301,17 +16631,17 @@ 2 3 - 167 + 164 3 4 - 71 + 70 4 5 - 68 + 67 5 @@ -16326,17 +16656,17 @@ 8 13 - 51 + 50 13 25 - 43 + 42 25 239 - 37 + 36 @@ -16346,19 +16676,19 @@ nested_types - 1588192 + 1485267 id - 1588192 + 1485267 declaring_type_id - 637372 + 596067 unbound_id - 1331867 + 1245554 @@ -16372,7 +16702,7 @@ 1 2 - 1588192 + 1485267 @@ -16388,7 +16718,7 @@ 1 2 - 1588192 + 1485267 @@ -16404,32 +16734,32 @@ 1 2 - 372999 + 348826 2 3 - 111186 + 103980 3 4 - 53434 + 49971 4 6 - 48119 + 45000 6 22 - 47988 + 44879 22 495 - 3644 + 3408 @@ -16445,32 +16775,32 @@ 1 2 - 374539 + 350267 2 3 - 111685 + 104447 3 4 - 52783 + 49362 4 6 - 48184 + 45061 6 26 - 47815 + 44716 26 495 - 2364 + 2211 @@ -16486,12 +16816,12 @@ 1 2 - 1283293 + 1200127 2 490 - 48574 + 45426 @@ -16507,12 +16837,12 @@ 1 2 - 1291081 + 1207411 2 490 - 40786 + 38143 @@ -16522,27 +16852,27 @@ properties - 4879885 + 4563638 id - 4879885 + 4563638 name - 1131841 + 1058491 declaring_type_id - 1362392 + 1274101 type_id - 541611 + 506511 unbound_id - 4365913 + 4082974 @@ -16556,7 +16886,7 @@ 1 2 - 4879885 + 4563638 @@ -16572,7 +16902,7 @@ 1 2 - 4879885 + 4563638 @@ -16588,7 +16918,7 @@ 1 2 - 4879885 + 4563638 @@ -16604,7 +16934,7 @@ 1 2 - 4879885 + 4563638 @@ -16620,27 +16950,27 @@ 1 2 - 714280 + 667991 2 3 - 182345 + 170528 3 4 - 69987 + 65451 4 8 - 91161 + 85253 8 8341 - 74066 + 69266 @@ -16656,27 +16986,27 @@ 1 2 - 714280 + 667991 2 3 - 182605 + 170771 3 4 - 69879 + 65350 4 8 - 91400 + 85477 8 4889 - 73675 + 68901 @@ -16692,17 +17022,17 @@ 1 2 - 989545 + 925416 2 3 - 81876 + 76570 3 1309 - 60420 + 56504 @@ -16718,27 +17048,27 @@ 1 2 - 720507 + 673813 2 3 - 186640 + 174545 3 4 - 70117 + 65573 4 8 - 88254 + 82535 8 7118 - 66321 + 62023 @@ -16754,37 +17084,37 @@ 1 2 - 484966 + 453537 2 3 - 319781 + 299058 3 4 - 181477 + 169716 4 5 - 115221 + 107754 5 7 - 114613 + 107186 7 14 - 104417 + 97650 14 2090 - 41914 + 39198 @@ -16800,37 +17130,37 @@ 1 2 - 560095 + 523798 2 3 - 245845 + 229913 3 4 - 181759 + 169980 4 5 - 117130 + 109539 5 7 - 114570 + 107145 7 14 - 102790 + 96128 14 2090 - 40200 + 37595 @@ -16846,32 +17176,32 @@ 1 2 - 562004 + 525583 2 3 - 389574 + 364327 3 4 - 167787 + 156914 4 5 - 90033 + 84198 5 9 - 113550 + 106191 9 54 - 39441 + 36885 @@ -16887,37 +17217,37 @@ 1 2 - 484966 + 453537 2 3 - 319781 + 299058 3 4 - 181477 + 169716 4 5 - 115221 + 107754 5 7 - 114613 + 107186 7 14 - 104417 + 97650 14 2090 - 41914 + 39198 @@ -16933,32 +17263,32 @@ 1 2 - 295874 + 276699 2 3 - 111685 + 104447 3 4 - 36273 + 33923 4 7 - 46687 + 43661 7 32 - 40656 + 38021 32 40789 - 10435 + 9758 @@ -16974,22 +17304,22 @@ 1 2 - 432812 + 404763 2 3 - 60571 + 56646 3 12 - 40959 + 38305 12 12163 - 7267 + 6796 @@ -17005,32 +17335,32 @@ 1 2 - 309845 + 289765 2 3 - 107064 + 100125 3 4 - 35384 + 33091 4 7 - 43324 + 40516 7 51 - 40699 + 38061 51 18897 - 5293 + 4950 @@ -17046,32 +17376,32 @@ 1 2 - 297479 + 278201 2 3 - 113333 + 105989 3 4 - 36577 + 34207 4 7 - 45971 + 42992 7 40 - 40699 + 38061 40 38842 - 7549 + 7060 @@ -17087,12 +17417,12 @@ 1 2 - 4291391 + 4013282 2 1206 - 74521 + 69692 @@ -17108,7 +17438,7 @@ 1 2 - 4365913 + 4082974 @@ -17124,12 +17454,12 @@ 1 2 - 4291391 + 4013282 2 1206 - 74521 + 69692 @@ -17145,12 +17475,12 @@ 1 2 - 4349923 + 4068021 2 1206 - 15989 + 14952 @@ -17160,15 +17490,15 @@ property_location - 4890667 + 4573722 id - 4879885 + 4563638 loc - 8027 + 7527 @@ -17182,12 +17512,12 @@ 1 2 - 4872118 + 4556375 2 15 - 7766 + 7263 @@ -17203,72 +17533,72 @@ 1 5 - 650 + 628 5 10 - 607 + 568 10 18 - 629 + 588 18 34 - 607 + 568 34 49 - 607 + 568 49 81 - 607 + 568 82 126 - 607 + 568 127 187 - 607 + 568 188 272 - 607 + 568 272 359 - 607 + 568 369 750 - 607 + 568 759 1795 - 607 + 568 1886 9614 - 607 + 568 9940 12699 - 65 + 60 @@ -17278,27 +17608,27 @@ indexers - 104631 + 95947 id - 104631 + 95947 name - 507 + 464 declaring_type_id - 82621 + 75829 type_id - 26242 + 23986 unbound_id - 56717 + 51842 @@ -17312,7 +17642,7 @@ 1 2 - 104631 + 95947 @@ -17328,7 +17658,7 @@ 1 2 - 104631 + 95947 @@ -17344,7 +17674,7 @@ 1 2 - 104631 + 95947 @@ -17360,7 +17690,7 @@ 1 2 - 104631 + 95947 @@ -17376,17 +17706,17 @@ 2 3 - 169 + 154 6 7 - 169 + 154 - 610 - 611 - 169 + 612 + 613 + 154 @@ -17402,17 +17732,17 @@ 2 3 - 169 + 154 4 5 - 169 + 154 - 484 - 485 - 169 + 486 + 487 + 154 @@ -17428,17 +17758,17 @@ 1 2 - 169 + 154 4 5 - 169 + 154 151 152 - 169 + 154 @@ -17454,17 +17784,17 @@ 2 3 - 169 + 154 6 7 - 169 + 154 327 328 - 169 + 154 @@ -17480,17 +17810,17 @@ 1 2 - 66706 + 61282 2 3 - 11512 + 10523 3 7 - 4401 + 4023 @@ -17506,12 +17836,12 @@ 1 2 - 82282 + 75519 2 3 - 338 + 309 @@ -17527,12 +17857,12 @@ 1 2 - 72462 + 66543 2 3 - 10158 + 9285 @@ -17548,17 +17878,17 @@ 1 2 - 66706 + 61282 2 3 - 11512 + 10523 3 7 - 4401 + 4023 @@ -17574,32 +17904,32 @@ 1 2 - 11682 + 10677 2 3 - 6264 + 5725 3 4 - 4063 + 3559 4 5 - 1862 + 1702 5 - 14 - 2031 + 12 + 1857 - 16 + 13 267 - 338 + 464 @@ -17615,12 +17945,12 @@ 1 2 - 26073 + 23832 2 3 - 169 + 154 @@ -17636,27 +17966,27 @@ 1 2 - 15745 + 14392 2 3 - 2878 + 2630 3 4 - 4571 + 4023 4 6 - 2200 + 2166 6 247 - 846 + 773 @@ -17672,32 +18002,32 @@ 1 2 - 11682 + 10677 2 3 - 6264 + 5725 3 4 - 4232 + 3714 4 5 - 1862 + 1702 5 - 17 - 2031 + 14 + 1857 - 110 + 16 111 - 169 + 309 @@ -17713,12 +18043,12 @@ 1 2 - 52992 + 48437 2 47 - 3724 + 3404 @@ -17734,7 +18064,7 @@ 1 2 - 56717 + 51842 @@ -17750,12 +18080,12 @@ 1 2 - 52992 + 48437 2 47 - 3724 + 3404 @@ -17771,12 +18101,12 @@ 1 2 - 55024 + 50294 2 - 41 - 1693 + 42 + 1547 @@ -17786,15 +18116,15 @@ indexer_location - 106324 + 97494 id - 104631 + 95947 loc - 6772 + 6190 @@ -17808,12 +18138,12 @@ 1 2 - 102938 + 94399 2 3 - 1693 + 1547 @@ -17829,57 +18159,57 @@ 1 2 - 338 + 309 2 3 - 1015 + 928 3 4 - 1523 + 1392 4 5 - 1015 + 928 5 7 - 507 + 464 7 8 - 169 + 154 10 11 - 507 + 464 12 14 - 338 + 309 17 20 - 507 + 464 21 25 - 507 + 464 55 - 310 - 338 + 312 + 309 @@ -17889,27 +18219,27 @@ accessors - 5815063 + 5438211 id - 5815063 + 5438211 kind - 43 + 40 name - 1544390 + 1444304 declaring_member_id - 4956663 + 4635441 unbound_id - 5171659 + 4836503 @@ -17923,7 +18253,7 @@ 1 2 - 5815063 + 5438211 @@ -17939,7 +18269,7 @@ 1 2 - 5815063 + 5438211 @@ -17955,7 +18285,7 @@ 1 2 - 5815063 + 5438211 @@ -17971,7 +18301,7 @@ 1 2 - 5815063 + 5438211 @@ -17987,12 +18317,12 @@ 39862 39863 - 21 + 20 228177 228178 - 21 + 20 @@ -18008,12 +18338,12 @@ 16327 16328 - 21 + 20 54860 54861 - 21 + 20 @@ -18029,12 +18359,12 @@ 39862 39863 - 21 + 20 228177 228178 - 21 + 20 @@ -18050,12 +18380,12 @@ 36177 36178 - 21 + 20 202205 202206 - 21 + 20 @@ -18071,27 +18401,27 @@ 1 2 - 1004406 + 939314 2 3 - 243047 + 227296 3 5 - 140799 + 131674 5 17 - 117976 + 110330 17 3385 - 38161 + 35688 @@ -18107,7 +18437,7 @@ 1 2 - 1544390 + 1444304 @@ -18123,27 +18453,27 @@ 1 2 - 1004406 + 939314 2 3 - 243047 + 227296 3 5 - 140799 + 131674 5 17 - 117976 + 110330 17 3385 - 38161 + 35688 @@ -18159,27 +18489,27 @@ 1 2 - 1015296 + 949499 2 3 - 249555 + 233382 3 5 - 139302 + 130274 5 24 - 116653 + 109093 24 3380 - 23582 + 22054 @@ -18195,12 +18525,12 @@ 1 2 - 4098263 + 3832670 2 3 - 858399 + 802770 @@ -18216,12 +18546,12 @@ 1 2 - 4098263 + 3832670 2 3 - 858399 + 802770 @@ -18237,12 +18567,12 @@ 1 2 - 4098263 + 3832670 2 3 - 858399 + 802770 @@ -18258,12 +18588,12 @@ 1 2 - 4098263 + 3832670 2 3 - 858399 + 802770 @@ -18279,12 +18609,12 @@ 1 2 - 5083708 + 4754252 2 1206 - 87950 + 82251 @@ -18300,7 +18630,7 @@ 1 2 - 5171659 + 4836503 @@ -18316,7 +18646,7 @@ 1 2 - 5171659 + 4836503 @@ -18332,12 +18662,12 @@ 1 2 - 5083708 + 4754252 2 1206 - 87950 + 82251 @@ -18347,26 +18677,26 @@ init_only_accessors - 5079 + 4642 id - 5079 + 4642 accessor_location - 5828080 + 5450384 id - 5815063 + 5438211 loc - 8027 + 7527 @@ -18380,12 +18710,12 @@ 1 2 - 5805192 + 5428979 2 15 - 9871 + 9231 @@ -18401,67 +18731,67 @@ 1 6 - 650 + 649 6 - 12 - 607 + 13 + 669 - 12 - 22 - 607 + 13 + 26 + 588 - 22 - 38 - 650 + 26 + 43 + 568 - 38 - 66 - 672 + 44 + 68 + 568 - 67 - 105 - 607 + 68 + 106 + 568 - 105 - 161 - 607 + 116 + 167 + 568 - 164 - 269 - 607 + 168 + 273 + 588 - 269 - 361 - 607 + 275 + 373 + 568 - 364 - 464 - 607 + 373 + 492 + 568 - 477 - 1105 - 607 + 517 + 1154 + 568 - 1105 - 2387 - 607 + 1167 + 2661 + 568 - 2455 + 2853 13984 - 585 + 486 @@ -18471,27 +18801,27 @@ events - 59075 + 55246 id - 59075 + 55246 name - 24667 + 23068 declaring_type_id - 24862 + 23251 type_id - 15555 + 14547 unbound_id - 51894 + 48531 @@ -18505,7 +18835,7 @@ 1 2 - 59075 + 55246 @@ -18521,7 +18851,7 @@ 1 2 - 59075 + 55246 @@ -18537,7 +18867,7 @@ 1 2 - 59075 + 55246 @@ -18553,7 +18883,7 @@ 1 2 - 59075 + 55246 @@ -18569,27 +18899,27 @@ 1 2 - 14405 + 13471 2 3 - 4707 + 4402 3 4 - 2776 + 2596 4 8 - 2061 + 1927 8 211 - 715 + 669 @@ -18605,27 +18935,27 @@ 1 2 - 14405 + 13471 2 3 - 4707 + 4402 3 4 - 2776 + 2596 4 8 - 2061 + 1927 8 200 - 715 + 669 @@ -18641,17 +18971,17 @@ 1 2 - 22389 + 20938 2 4 - 1865 + 1744 4 9 - 412 + 385 @@ -18667,27 +18997,27 @@ 1 2 - 14622 + 13674 2 3 - 4859 + 4544 3 4 - 2798 + 2617 4 8 - 1930 + 1805 8 145 - 455 + 426 @@ -18703,32 +19033,32 @@ 1 2 - 12973 + 12132 2 3 - 4946 + 4625 3 4 - 2690 + 2515 4 5 - 1735 + 1623 5 9 - 1930 + 1805 9 75 - 585 + 547 @@ -18744,32 +19074,32 @@ 1 2 - 13016 + 12173 2 3 - 5119 + 4788 3 4 - 2494 + 2333 4 5 - 1713 + 1602 5 9 - 1930 + 1805 9 75 - 585 + 547 @@ -18785,27 +19115,27 @@ 1 2 - 15576 + 14567 2 3 - 4794 + 4483 3 4 - 2408 + 2252 4 9 - 1930 + 1805 12 52 - 151 + 142 @@ -18821,32 +19151,32 @@ 1 2 - 12973 + 12132 2 3 - 4946 + 4625 3 4 - 2690 + 2515 4 5 - 1735 + 1623 5 9 - 1930 + 1805 9 75 - 585 + 547 @@ -18862,27 +19192,27 @@ 1 2 - 7679 + 7182 2 3 - 3210 + 3002 3 4 - 2581 + 2414 4 7 - 1236 + 1156 7 620 - 846 + 791 @@ -18898,17 +19228,17 @@ 1 2 - 12539 + 11726 2 3 - 1952 + 1825 3 262 - 1063 + 994 @@ -18924,27 +19254,27 @@ 1 2 - 8851 + 8277 2 3 - 2776 + 2596 3 4 - 2646 + 2475 4 26 - 1193 + 1115 40 347 - 86 + 81 @@ -18960,27 +19290,27 @@ 1 2 - 7701 + 7202 2 3 - 3319 + 3104 3 4 - 2494 + 2333 4 6 - 1171 + 1095 6 557 - 867 + 811 @@ -18996,12 +19326,12 @@ 1 2 - 50049 + 46806 2 23 - 1844 + 1724 @@ -19017,7 +19347,7 @@ 1 2 - 51894 + 48531 @@ -19033,12 +19363,12 @@ 1 2 - 50049 + 46806 2 23 - 1844 + 1724 @@ -19054,12 +19384,12 @@ 1 2 - 51546 + 48206 2 5 - 347 + 324 @@ -19069,15 +19399,15 @@ event_location - 59075 + 55246 id - 59075 + 55246 loc - 2429 + 2272 @@ -19091,7 +19421,7 @@ 1 2 - 59075 + 55246 @@ -19107,52 +19437,52 @@ 1 2 - 433 + 405 2 3 - 368 + 344 3 4 - 195 + 182 4 6 - 216 + 202 6 9 - 216 + 202 10 16 - 216 + 202 16 30 - 195 + 182 30 42 - 195 + 182 42 70 - 195 + 182 79 230 - 195 + 182 @@ -19162,27 +19492,27 @@ event_accessors - 118150 + 110493 id - 118150 + 110493 kind - 43 + 40 name - 50462 + 47191 declaring_event_id - 59075 + 55246 unbound_id - 103788 + 97062 @@ -19196,7 +19526,7 @@ 1 2 - 118150 + 110493 @@ -19212,7 +19542,7 @@ 1 2 - 118150 + 110493 @@ -19228,7 +19558,7 @@ 1 2 - 118150 + 110493 @@ -19244,7 +19574,7 @@ 1 2 - 118150 + 110493 @@ -19260,7 +19590,7 @@ 2723 2724 - 43 + 40 @@ -19276,7 +19606,7 @@ 1163 1164 - 43 + 40 @@ -19292,7 +19622,7 @@ 2723 2724 - 43 + 40 @@ -19308,7 +19638,7 @@ 2392 2393 - 43 + 40 @@ -19324,27 +19654,27 @@ 1 2 - 29591 + 27674 2 3 - 9502 + 8886 3 4 - 5597 + 5234 4 8 - 4208 + 3936 8 187 - 1562 + 1460 @@ -19360,7 +19690,7 @@ 1 2 - 50462 + 47191 @@ -19376,27 +19706,27 @@ 1 2 - 29591 + 27674 2 3 - 9502 + 8886 3 4 - 5597 + 5234 4 8 - 4208 + 3936 8 187 - 1562 + 1460 @@ -19412,27 +19742,27 @@ 1 2 - 30069 + 28120 2 3 - 10023 + 9373 3 4 - 5640 + 5275 4 8 - 3905 + 3651 8 128 - 824 + 770 @@ -19448,7 +19778,7 @@ 2 3 - 59075 + 55246 @@ -19464,7 +19794,7 @@ 2 3 - 59075 + 55246 @@ -19480,7 +19810,7 @@ 2 3 - 59075 + 55246 @@ -19496,7 +19826,7 @@ 2 3 - 59075 + 55246 @@ -19512,12 +19842,12 @@ 1 2 - 100099 + 93612 2 23 - 3688 + 3449 @@ -19533,7 +19863,7 @@ 1 2 - 103788 + 97062 @@ -19549,7 +19879,7 @@ 1 2 - 103788 + 97062 @@ -19565,12 +19895,12 @@ 1 2 - 100099 + 93612 2 23 - 3688 + 3449 @@ -19580,15 +19910,15 @@ event_accessor_location - 118150 + 110493 id - 118150 + 110493 loc - 2429 + 2272 @@ -19602,7 +19932,7 @@ 1 2 - 118150 + 110493 @@ -19618,52 +19948,52 @@ 2 3 - 433 + 405 4 5 - 368 + 344 6 7 - 195 + 182 8 11 - 216 + 202 12 17 - 216 + 202 20 31 - 216 + 202 32 59 - 195 + 182 60 83 - 195 + 182 84 139 - 195 + 182 158 459 - 195 + 182 @@ -19673,11 +20003,11 @@ operators - 807641 + 807667 id - 807641 + 807667 name @@ -19689,15 +20019,15 @@ declaring_type_id - 94479 + 94482 type_id - 37120 + 37122 unbound_id - 95783 + 95786 @@ -19711,7 +20041,7 @@ 1 2 - 807641 + 807667 @@ -19727,7 +20057,7 @@ 1 2 - 807641 + 807667 @@ -19743,7 +20073,7 @@ 1 2 - 807641 + 807667 @@ -19759,7 +20089,7 @@ 1 2 - 807641 + 807667 @@ -19775,7 +20105,7 @@ 1 2 - 807641 + 807667 @@ -20296,7 +20626,7 @@ 1 2 - 56653 + 56655 2 @@ -20342,7 +20672,7 @@ 1 2 - 92171 + 92174 2 @@ -20363,7 +20693,7 @@ 1 2 - 92171 + 92174 2 @@ -20384,7 +20714,7 @@ 1 2 - 93646 + 93649 2 @@ -20405,7 +20735,7 @@ 1 2 - 56653 + 56655 2 @@ -20451,12 +20781,12 @@ 1 7 - 3397 + 3398 7 12 - 3397 + 3398 12 @@ -20542,7 +20872,7 @@ 1 2 - 36437 + 36438 2 @@ -20563,7 +20893,7 @@ 1 2 - 36437 + 36438 2 @@ -20584,7 +20914,7 @@ 1 2 - 36244 + 36245 2 @@ -20605,12 +20935,12 @@ 1 7 - 3397 + 3398 7 12 - 3397 + 3398 12 @@ -20696,7 +21026,7 @@ 1 2 - 84350 + 84352 3 @@ -20722,7 +21052,7 @@ 1 2 - 95783 + 95786 @@ -20738,7 +21068,7 @@ 1 2 - 95783 + 95786 @@ -20754,7 +21084,7 @@ 1 2 - 84350 + 84352 3 @@ -20780,7 +21110,7 @@ 1 2 - 84350 + 84352 3 @@ -20800,15 +21130,15 @@ operator_location - 1510289 + 1510337 id - 751073 + 751097 loc - 23550 + 23551 @@ -20827,7 +21157,7 @@ 2 3 - 740024 + 740048 3 @@ -20863,12 +21193,12 @@ 48 61 - 1880 + 1902 - 62 + 63 73 - 1880 + 1859 75 @@ -20882,7 +21212,7 @@ 96 - 18513 + 18458 876 @@ -20893,15 +21223,15 @@ constant_value - 2847100 + 2662590 id - 2845820 + 2661393 value - 965572 + 902997 @@ -20915,12 +21245,12 @@ 1 2 - 2844974 + 2660602 2 9 - 846 + 791 @@ -20936,22 +21266,22 @@ 1 2 - 780580 + 729993 2 3 - 96108 + 89879 3 10 - 74803 + 69956 10 7596 - 14079 + 13167 @@ -20961,27 +21291,27 @@ methods - 15027104 + 14053498 id - 15027104 + 14053498 name - 4232381 + 3958299 declaring_type_id - 3140805 + 2937261 type_id - 999546 + 934769 unbound_id - 12416391 + 11611975 @@ -20995,7 +21325,7 @@ 1 2 - 15027104 + 14053498 @@ -21011,7 +21341,7 @@ 1 2 - 15027104 + 14053498 @@ -21027,7 +21357,7 @@ 1 2 - 15027104 + 14053498 @@ -21043,7 +21373,7 @@ 1 2 - 15027104 + 14053498 @@ -21059,27 +21389,27 @@ 1 2 - 3032743 + 2836365 2 3 - 495705 + 463621 3 5 - 336877 + 315045 5 26 - 319391 + 298692 26 15936 - 47663 + 44574 @@ -21095,22 +21425,22 @@ 1 2 - 3164930 + 2959985 2 3 - 431662 + 403728 3 6 - 378509 + 353980 6 10142 - 257279 + 240605 @@ -21126,17 +21456,17 @@ 1 2 - 3856388 + 3606673 2 7 - 323513 + 302547 7 2905 - 52479 + 49078 @@ -21152,22 +21482,22 @@ 1 2 - 3079278 + 2879884 2 3 - 510240 + 477214 3 5 - 336443 + 314639 5 8458 - 306417 + 286560 @@ -21183,42 +21513,42 @@ 1 2 - 1095784 + 1024771 2 3 - 701524 + 656061 3 4 - 312514 + 292261 4 5 - 221699 + 207332 5 6 - 178613 + 167018 6 9 - 274634 + 256836 9 18 - 241658 + 226018 18 8066 - 114375 + 106962 @@ -21234,42 +21564,42 @@ 1 2 - 1137438 + 1063725 2 3 - 725800 + 678764 3 4 - 320844 + 300052 4 5 - 251595 + 235290 5 6 - 194537 + 181910 6 10 - 265566 + 248356 10 70 - 235692 + 220438 70 3734 - 9328 + 8724 @@ -21285,32 +21615,32 @@ 1 2 - 1500892 + 1403625 2 3 - 768951 + 719119 3 4 - 314705 + 294310 4 5 - 257669 + 240971 5 10 - 236235 + 220925 10 848 - 62350 + 58310 @@ -21326,42 +21656,42 @@ 1 2 - 1095806 + 1024791 2 3 - 701502 + 656040 3 4 - 312514 + 292261 4 5 - 221699 + 207332 5 6 - 178613 + 167018 6 9 - 274634 + 256836 9 18 - 241658 + 226018 18 8066 - 114375 + 106962 @@ -21377,32 +21707,32 @@ 1 2 - 566842 + 530107 2 3 - 164989 + 154296 3 4 - 72634 + 67927 4 7 - 88666 + 82920 7 23 - 75498 + 70605 23 - 192603 - 30915 + 192615 + 28911 @@ -21418,27 +21748,27 @@ 1 2 - 697076 + 651902 2 3 - 131904 + 123356 3 5 - 85499 + 79958 5 27 - 75107 + 70240 27 - 59265 - 9957 + 59275 + 9312 @@ -21454,27 +21784,27 @@ 1 2 - 648914 + 606860 2 3 - 158068 + 147824 3 4 - 65236 + 61008 4 9 - 79750 + 74581 9 61707 - 47576 + 44493 @@ -21490,32 +21820,32 @@ 1 2 - 568860 + 531994 2 3 - 166312 + 155534 3 4 - 72851 + 68130 4 7 - 89339 + 83549 7 24 - 75064 + 70199 24 - 167288 - 27118 + 167300 + 25361 @@ -21531,12 +21861,12 @@ 1 2 - 12025081 + 11246024 2 3017 - 391309 + 365950 @@ -21552,7 +21882,7 @@ 1 2 - 12416391 + 11611975 @@ -21568,12 +21898,12 @@ 1 2 - 12025167 + 11246105 2 3017 - 391223 + 365869 @@ -21589,12 +21919,12 @@ 1 2 - 12291906 + 11495557 2 1636 - 124484 + 116417 @@ -21604,15 +21934,15 @@ method_location - 15099522 + 14121222 id - 15027104 + 14053498 loc - 8504 + 7973 @@ -21626,12 +21956,12 @@ 1 2 - 14977184 + 14006813 2 70 - 49919 + 46684 @@ -21647,67 +21977,67 @@ 1 6 - 694 + 669 6 22 - 650 + 608 23 64 - 672 + 628 64 102 - 650 + 608 105 174 - 650 + 608 176 243 - 650 + 608 243 354 - 650 + 608 356 498 - 650 + 608 502 853 - 650 + 608 858 1303 - 650 + 608 1308 2060 - 650 + 608 2068 5869 - 650 + 608 6153 43327 - 629 + 588 @@ -21717,23 +22047,23 @@ constructors - 4401492 + 4116248 id - 4401492 + 4116248 name - 2051724 + 1918759 declaring_type_id - 3294773 + 3081251 unbound_id - 4086613 + 3821775 @@ -21747,7 +22077,7 @@ 1 2 - 4401492 + 4116248 @@ -21763,7 +22093,7 @@ 1 2 - 4401492 + 4116248 @@ -21779,7 +22109,7 @@ 1 2 - 4401492 + 4116248 @@ -21795,22 +22125,22 @@ 1 2 - 1486725 + 1390376 2 3 - 372999 + 348826 3 7 - 156766 + 146607 7 23610 - 35232 + 32949 @@ -21826,17 +22156,17 @@ 1 2 - 1877992 + 1756286 2 6 - 154597 + 144578 6 11806 - 19134 + 17894 @@ -21852,22 +22182,22 @@ 1 2 - 1508919 + 1411132 2 3 - 374192 + 349942 3 10 - 155226 + 145166 10 23610 - 13385 + 12518 @@ -21883,17 +22213,17 @@ 1 2 - 2455031 + 2295930 2 3 - 711699 + 665576 3 55 - 128042 + 119744 @@ -21909,7 +22239,7 @@ 1 2 - 3294773 + 3081251 @@ -21925,17 +22255,17 @@ 1 2 - 2455031 + 2295930 2 3 - 711699 + 665576 3 55 - 128042 + 119744 @@ -21951,12 +22281,12 @@ 1 2 - 4045046 + 3782902 2 1016 - 41567 + 38873 @@ -21972,7 +22302,7 @@ 1 2 - 4086613 + 3821775 @@ -21988,12 +22318,12 @@ 1 2 - 4045046 + 3782902 2 1016 - 41567 + 38873 @@ -22003,15 +22333,15 @@ constructor_location - 4437809 + 4150212 id - 4401492 + 4116248 loc - 8569 + 8014 @@ -22025,12 +22355,12 @@ 1 2 - 4386870 + 4102573 2 92 - 14622 + 13674 @@ -22046,67 +22376,67 @@ 1 4 - 737 + 689 4 13 - 715 + 669 13 25 - 650 + 608 25 46 - 650 + 608 46 64 - 650 + 608 64 93 - 650 + 608 94 135 - 650 + 608 135 184 - 650 + 608 184 302 - 650 + 608 302 472 - 650 + 608 483 740 - 650 + 608 788 1890 - 650 + 608 1890 8395 - 607 + 568 @@ -22116,23 +22446,23 @@ destructors - 6095 + 5571 id - 6095 + 5571 name - 5925 + 5416 declaring_type_id - 6095 + 5571 unbound_id - 6095 + 5571 @@ -22146,7 +22476,7 @@ 1 2 - 6095 + 5571 @@ -22162,7 +22492,7 @@ 1 2 - 6095 + 5571 @@ -22178,7 +22508,7 @@ 1 2 - 6095 + 5571 @@ -22194,12 +22524,12 @@ 1 2 - 5756 + 5261 2 3 - 169 + 154 @@ -22215,12 +22545,12 @@ 1 2 - 5756 + 5261 2 3 - 169 + 154 @@ -22236,12 +22566,12 @@ 1 2 - 5756 + 5261 2 3 - 169 + 154 @@ -22257,7 +22587,7 @@ 1 2 - 6095 + 5571 @@ -22273,7 +22603,7 @@ 1 2 - 6095 + 5571 @@ -22289,7 +22619,7 @@ 1 2 - 6095 + 5571 @@ -22305,7 +22635,7 @@ 1 2 - 6095 + 5571 @@ -22321,7 +22651,7 @@ 1 2 - 6095 + 5571 @@ -22337,7 +22667,7 @@ 1 2 - 6095 + 5571 @@ -22347,15 +22677,15 @@ destructor_location - 6264 + 5725 id - 6095 + 5571 loc - 3047 + 2785 @@ -22369,12 +22699,12 @@ 1 2 - 5925 + 5416 2 3 - 169 + 154 @@ -22390,27 +22720,27 @@ 1 2 - 1862 + 1702 2 3 - 507 + 464 3 4 - 169 + 154 4 5 - 338 + 309 9 10 - 169 + 154 @@ -22420,15 +22750,15 @@ overrides - 3549970 + 3319910 id - 3549970 + 3319910 base_id - 1153189 + 1078455 @@ -22442,7 +22772,7 @@ 1 2 - 3549970 + 3319910 @@ -22458,27 +22788,27 @@ 1 2 - 787088 + 736080 2 3 - 181585 + 169817 3 5 - 93548 + 87485 5 44 - 86497 + 80891 44 4471 - 4469 + 4179 @@ -22488,15 +22818,15 @@ explicitly_implements - 1340285 + 1253426 id - 1339873 + 1253041 interface_id - 99058 + 92639 @@ -22510,12 +22840,12 @@ 1 2 - 1339461 + 1252655 2 3 - 412 + 385 @@ -22531,37 +22861,37 @@ 1 2 - 50744 + 47455 2 3 - 15750 + 14729 3 4 - 6009 + 5620 4 6 - 9133 + 8541 6 10 - 7484 + 6999 10 35 - 7484 + 6999 35 10047 - 2451 + 2292 @@ -22862,15 +23192,15 @@ local_function_stmts - 3316 + 3256 fn - 3316 + 3256 stmt - 3316 + 3256 @@ -22884,7 +23214,7 @@ 1 2 - 3316 + 3256 @@ -22900,7 +23230,7 @@ 1 2 - 3316 + 3256 @@ -22910,31 +23240,31 @@ fields - 11002581 + 10289546 id - 11002581 + 10289546 kind - 43 + 40 name - 4569128 + 4273020 declaring_type_id - 2488007 + 2326769 type_id - 2180548 + 2039235 unbound_id - 10641861 + 9952202 @@ -22948,7 +23278,7 @@ 1 2 - 11002581 + 10289546 @@ -22964,7 +23294,7 @@ 1 2 - 11002581 + 10289546 @@ -22980,7 +23310,7 @@ 1 2 - 11002581 + 10289546 @@ -22996,7 +23326,7 @@ 1 2 - 11002581 + 10289546 @@ -23012,7 +23342,7 @@ 1 2 - 11002581 + 10289546 @@ -23028,12 +23358,12 @@ 131175 131176 - 21 + 20 375977 375978 - 21 + 20 @@ -23049,12 +23379,12 @@ 89638 89639 - 21 + 20 125803 125804 - 21 + 20 @@ -23070,12 +23400,12 @@ 17217 17218 - 21 + 20 104358 104359 - 21 + 20 @@ -23091,12 +23421,12 @@ 6833 6834 - 21 + 20 96595 96596 - 21 + 20 @@ -23112,12 +23442,12 @@ 130817 130818 - 21 + 20 359708 359709 - 21 + 20 @@ -23133,22 +23463,22 @@ 1 2 - 3598609 + 3365397 2 3 - 510457 + 477377 3 8 - 343494 + 321233 8 12308 - 116566 + 109012 @@ -23164,12 +23494,12 @@ 1 2 - 4464299 + 4174984 2 3 - 104829 + 98035 @@ -23185,22 +23515,22 @@ 1 2 - 3598609 + 3365397 2 3 - 510479 + 477397 3 8 - 343472 + 321213 8 12308 - 116566 + 109012 @@ -23216,17 +23546,17 @@ 1 2 - 4006538 + 3746889 2 3 - 343516 + 321254 3 12308 - 219074 + 204877 @@ -23242,22 +23572,22 @@ 1 2 - 3622821 + 3388040 2 3 - 511716 + 478553 3 10 - 352367 + 329531 10 12308 - 82223 + 76894 @@ -23273,42 +23603,42 @@ 1 2 - 686272 + 641798 2 3 - 636266 + 595032 3 4 - 353257 + 330363 4 5 - 217772 + 203659 5 6 - 146093 + 136625 6 8 - 181802 + 170020 8 15 - 193669 + 181118 15 6823 - 72872 + 68150 @@ -23324,12 +23654,12 @@ 1 2 - 2338465 + 2186918 2 3 - 149542 + 139851 @@ -23345,42 +23675,42 @@ 1 2 - 686272 + 641798 2 3 - 636287 + 595052 3 4 - 353235 + 330343 4 5 - 217772 + 203659 5 6 - 146093 + 136625 6 8 - 181802 + 170020 8 15 - 193669 + 181118 15 6823 - 72872 + 68150 @@ -23396,32 +23726,32 @@ 1 2 - 947999 + 886563 2 3 - 690980 + 646200 3 4 - 324945 + 303886 4 5 - 172257 + 161093 5 8 - 228446 + 213641 8 524 - 123378 + 115382 @@ -23437,42 +23767,42 @@ 1 2 - 686272 + 641798 2 3 - 636266 + 595032 3 4 - 353257 + 330363 4 5 - 217772 + 203659 5 6 - 146093 + 136625 6 8 - 181802 + 170020 8 15 - 193669 + 181118 15 6823 - 72872 + 68150 @@ -23488,27 +23818,27 @@ 1 2 - 1482495 + 1386420 2 3 - 268712 + 251298 3 5 - 200807 + 187793 5 14 - 165618 + 154885 14 57540 - 62915 + 58837 @@ -23524,12 +23854,12 @@ 1 2 - 2117242 + 1980032 2 3 - 63305 + 59202 @@ -23545,22 +23875,22 @@ 1 2 - 1587650 + 1484760 2 3 - 258949 + 242168 3 5 - 171671 + 160545 5 33041 - 162277 + 151760 @@ -23576,22 +23906,22 @@ 1 2 - 1645770 + 1539114 2 3 - 262399 + 245394 3 6 - 168677 + 157746 6 19141 - 103701 + 96980 @@ -23607,27 +23937,27 @@ 1 2 - 1486139 + 1389828 2 3 - 270686 + 253144 3 5 - 199353 + 186434 5 15 - 167961 + 157076 15 56593 - 56406 + 52751 @@ -23643,12 +23973,12 @@ 1 2 - 10580052 + 9894399 2 1016 - 61808 + 57803 @@ -23664,7 +23994,7 @@ 1 2 - 10641861 + 9952202 @@ -23680,7 +24010,7 @@ 1 2 - 10641861 + 9952202 @@ -23696,12 +24026,12 @@ 1 2 - 10580052 + 9894399 2 1016 - 61808 + 57803 @@ -23717,12 +24047,12 @@ 1 2 - 10622618 + 9934206 2 779 - 19243 + 17996 @@ -23732,15 +24062,15 @@ field_location - 10994315 + 10281816 id - 10929752 + 10221436 loc - 8244 + 7730 @@ -23754,12 +24084,12 @@ 1 2 - 10890853 + 10185058 2 22 - 38898 + 36377 @@ -23775,72 +24105,72 @@ 1 10 - 629 + 608 10 20 - 629 + 588 20 46 - 650 + 608 47 82 - 629 + 588 83 139 - 629 + 588 140 204 - 650 + 608 204 295 - 629 + 588 296 491 - 629 + 588 504 732 - 629 + 588 744 1130 - 629 + 588 1152 1951 - 629 + 588 2008 4744 - 629 + 588 5091 20299 - 629 + 588 22254 22255 - 21 + 20 @@ -23850,11 +24180,11 @@ localvars - 354446 + 354380 id - 354446 + 354380 kind @@ -23862,7 +24192,7 @@ name - 63800 + 63788 implicitly_typed @@ -23870,11 +24200,11 @@ type_id - 17979 + 17976 parent_id - 354446 + 354380 @@ -23888,7 +24218,7 @@ 1 2 - 354446 + 354380 @@ -23904,7 +24234,7 @@ 1 2 - 354446 + 354380 @@ -23920,7 +24250,7 @@ 1 2 - 354446 + 354380 @@ -23936,7 +24266,7 @@ 1 2 - 354446 + 354380 @@ -23952,7 +24282,7 @@ 1 2 - 354446 + 354380 @@ -24073,27 +24403,27 @@ 1 2 - 40179 + 40171 2 3 - 10096 + 10094 3 4 - 3736 + 3735 4 8 - 5319 + 5318 8 3773 - 4469 + 4468 @@ -24109,7 +24439,7 @@ 1 2 - 63668 + 63656 2 @@ -24130,12 +24460,12 @@ 1 2 - 55359 + 55349 2 3 - 8440 + 8438 @@ -24151,17 +24481,17 @@ 1 2 - 54993 + 54983 2 3 - 4850 + 4849 3 72 - 3956 + 3955 @@ -24177,27 +24507,27 @@ 1 2 - 40179 + 40171 2 3 - 10096 + 10094 3 4 - 3736 + 3735 4 8 - 5319 + 5318 8 3773 - 4469 + 4468 @@ -24318,7 +24648,7 @@ 1 2 - 7942 + 7940 2 @@ -24364,7 +24694,7 @@ 1 2 - 17906 + 17902 2 @@ -24385,7 +24715,7 @@ 1 2 - 10403 + 10401 2 @@ -24395,17 +24725,17 @@ 3 4 - 1216 + 1215 4 7 - 1509 + 1508 7 23 - 1392 + 1391 23 @@ -24426,12 +24756,12 @@ 1 2 - 13056 + 13053 2 3 - 4923 + 4922 @@ -24447,7 +24777,7 @@ 1 2 - 7942 + 7940 2 @@ -24493,7 +24823,7 @@ 1 2 - 354446 + 354380 @@ -24509,7 +24839,7 @@ 1 2 - 354446 + 354380 @@ -24525,7 +24855,7 @@ 1 2 - 354446 + 354380 @@ -24541,7 +24871,7 @@ 1 2 - 354446 + 354380 @@ -24557,7 +24887,7 @@ 1 2 - 354446 + 354380 @@ -24567,15 +24897,15 @@ localvar_location - 354446 + 354380 id - 354446 + 354380 loc - 354446 + 354380 @@ -24589,7 +24919,7 @@ 1 2 - 354446 + 354380 @@ -24605,7 +24935,7 @@ 1 2 - 354446 + 354380 @@ -24615,35 +24945,35 @@ params - 27466231 + 25686249 id - 27466231 + 25686249 name - 1613727 + 1509147 type_id - 2077562 + 1942924 index - 1193 + 1115 mode - 130 + 121 parent_id - 15223790 + 14237194 unbound_id - 22123530 + 20689788 @@ -24657,7 +24987,7 @@ 1 2 - 27466231 + 25686249 @@ -24673,7 +25003,7 @@ 1 2 - 27466231 + 25686249 @@ -24689,7 +25019,7 @@ 1 2 - 27466231 + 25686249 @@ -24705,7 +25035,7 @@ 1 2 - 27466231 + 25686249 @@ -24721,7 +25051,7 @@ 1 2 - 27466231 + 25686249 @@ -24737,7 +25067,7 @@ 1 2 - 27466231 + 25686249 @@ -24753,37 +25083,37 @@ 1 2 - 721136 + 674402 2 3 - 280297 + 262132 3 4 - 136265 + 127434 4 6 - 144422 + 135063 6 10 - 127739 + 119460 10 25 - 121708 + 113820 25 74292 - 82158 + 76833 @@ -24799,22 +25129,22 @@ 1 2 - 1310932 + 1225975 2 3 - 157330 + 147134 3 13 - 122684 + 114733 13 13366 - 22779 + 21303 @@ -24830,22 +25160,22 @@ 1 2 - 1115939 + 1043619 2 3 - 275199 + 257364 3 4 - 107476 + 100511 4 21 - 115112 + 107652 @@ -24861,17 +25191,17 @@ 1 2 - 1492257 + 1395550 2 6 - 121165 + 113313 6 7 - 303 + 284 @@ -24887,37 +25217,37 @@ 1 2 - 721136 + 674402 2 3 - 280297 + 262132 3 4 - 136265 + 127434 4 6 - 144422 + 135063 6 10 - 127739 + 119460 10 25 - 121708 + 113820 25 74292 - 82158 + 76833 @@ -24933,37 +25263,37 @@ 1 2 - 736236 + 688523 2 3 - 285417 + 266920 3 4 - 146895 + 137376 4 6 - 147741 + 138167 6 10 - 121990 + 114084 10 35 - 122445 + 114510 35 63585 - 53000 + 49565 @@ -24979,37 +25309,37 @@ 1 2 - 1018377 + 952380 2 3 - 301666 + 282116 3 4 - 173276 + 162047 4 5 - 129105 + 120739 5 8 - 158155 + 147905 8 19 - 161170 + 150726 19 90397 - 135809 + 127008 @@ -25025,27 +25355,27 @@ 1 2 - 1396974 + 1306441 2 3 - 350827 + 328091 3 4 - 149455 + 139770 4 13 - 156224 + 146100 13 9576 - 24081 + 22520 @@ -25061,22 +25391,22 @@ 1 2 - 1515536 + 1417320 2 3 - 354537 + 331560 3 6 - 176075 + 164664 6 54 - 31414 + 29378 @@ -25092,12 +25422,12 @@ 1 2 - 1956592 + 1829793 2 6 - 120970 + 113130 @@ -25113,37 +25443,37 @@ 1 2 - 1049357 + 981352 2 3 - 281902 + 263633 3 4 - 174122 + 162838 4 5 - 127392 + 119136 5 9 - 182084 + 170284 9 24 - 157482 + 147276 24 74138 - 105219 + 98401 @@ -25159,37 +25489,37 @@ 1 2 - 1024603 + 958203 2 3 - 302794 + 283171 3 4 - 185339 + 173327 4 5 - 128346 + 120029 5 8 - 165575 + 154844 8 19 - 157352 + 147155 19 84336 - 113550 + 106191 @@ -25205,52 +25535,52 @@ 1 2 - 282 + 263 2 5 - 108 + 101 5 11 - 108 + 101 14 25 - 108 + 101 30 60 - 108 + 101 68 128 - 108 + 101 172 587 - 108 + 101 902 5705 - 108 + 101 9457 127701 - 108 + 101 304936 701725 - 43 + 40 @@ -25266,52 +25596,52 @@ 1 2 - 282 + 263 2 4 - 108 + 101 4 9 - 108 + 101 11 20 - 108 + 101 24 48 - 108 + 101 52 93 - 108 + 101 129 355 - 108 + 101 503 2199 - 108 + 101 3339 19993 - 108 + 101 28824 33768 - 43 + 40 @@ -25327,52 +25657,52 @@ 1 2 - 282 + 263 2 4 - 86 + 81 4 8 - 108 + 101 9 14 - 108 + 101 18 34 - 108 + 101 41 74 - 108 + 101 82 225 - 108 + 101 306 988 - 108 + 101 1501 8856 - 108 + 101 17752 63582 - 65 + 60 @@ -25388,32 +25718,32 @@ 1 2 - 650 + 608 2 3 - 195 + 182 3 4 - 43 + 40 4 5 - 86 + 81 5 6 - 195 + 182 6 7 - 21 + 20 @@ -25429,52 +25759,52 @@ 1 2 - 282 + 263 2 5 - 108 + 101 5 11 - 108 + 101 14 25 - 108 + 101 30 60 - 108 + 101 68 128 - 108 + 101 172 587 - 108 + 101 902 5705 - 108 + 101 9457 127701 - 108 + 101 304936 701725 - 43 + 40 @@ -25490,52 +25820,52 @@ 1 2 - 282 + 263 2 5 - 108 + 101 5 11 - 108 + 101 14 25 - 108 + 101 30 60 - 108 + 101 68 128 - 108 + 101 172 569 - 108 + 101 875 5326 - 108 + 101 8782 108038 - 108 + 101 237530 555424 - 43 + 40 @@ -25551,32 +25881,32 @@ 774 775 - 21 + 20 4021 4022 - 21 + 20 11617 11618 - 21 + 20 17805 17806 - 21 + 20 22566 22567 - 21 + 20 1209240 1209241 - 21 + 20 @@ -25592,32 +25922,32 @@ 165 166 - 21 + 20 538 539 - 21 + 20 1968 1969 - 21 + 20 2333 2334 - 21 + 20 6498 6499 - 21 + 20 69882 69883 - 21 + 20 @@ -25633,32 +25963,32 @@ 240 241 - 21 + 20 618 619 - 21 + 20 2241 2242 - 21 + 20 3599 3600 - 21 + 20 5662 5663 - 21 + 20 89942 89943 - 21 + 20 @@ -25674,32 +26004,32 @@ 1 2 - 21 + 20 11 12 - 21 + 20 13 14 - 21 + 20 16 17 - 21 + 20 25 26 - 21 + 20 55 56 - 21 + 20 @@ -25715,32 +26045,32 @@ 635 636 - 21 + 20 4021 4022 - 21 + 20 9598 9599 - 21 + 20 16282 16283 - 21 + 20 17805 17806 - 21 + 20 685895 685896 - 21 + 20 @@ -25756,32 +26086,32 @@ 710 711 - 21 + 20 3669 3670 - 21 + 20 10322 10323 - 21 + 20 17803 17804 - 21 + 20 20567 20568 - 21 + 20 966689 966690 - 21 + 20 @@ -25797,27 +26127,27 @@ 1 2 - 8608252 + 8050384 2 3 - 3845106 + 3595919 3 4 - 1492843 + 1396098 4 8 - 1153840 + 1079064 8 56 - 123747 + 115727 @@ -25833,27 +26163,27 @@ 1 2 - 8608230 + 8050363 2 3 - 3845106 + 3595919 3 4 - 1492843 + 1396098 4 8 - 1153861 + 1079084 8 56 - 123747 + 115727 @@ -25869,22 +26199,22 @@ 1 2 - 9102178 + 8512301 2 3 - 3783493 + 3538299 3 4 - 1384347 + 1294633 4 43 - 953770 + 891960 @@ -25900,27 +26230,27 @@ 1 2 - 8608252 + 8050384 2 3 - 3845106 + 3595919 3 4 - 1492843 + 1396098 4 8 - 1153840 + 1079064 8 56 - 123747 + 115727 @@ -25936,12 +26266,12 @@ 1 2 - 14543505 + 13600995 2 5 - 680285 + 636198 @@ -25957,27 +26287,27 @@ 1 2 - 8608252 + 8050384 2 3 - 3845106 + 3595919 3 4 - 1492843 + 1396098 4 8 - 1153840 + 1079064 8 56 - 123747 + 115727 @@ -25993,12 +26323,12 @@ 1 2 - 21382825 + 19997085 2 17584 - 740705 + 692702 @@ -26014,12 +26344,12 @@ 1 2 - 22123465 + 20689727 2 3 - 65 + 60 @@ -26035,12 +26365,12 @@ 1 2 - 21899292 + 20480082 2 9835 - 224237 + 209705 @@ -26056,7 +26386,7 @@ 1 2 - 22123530 + 20689788 @@ -26072,7 +26402,7 @@ 1 2 - 22123530 + 20689788 @@ -26088,12 +26418,12 @@ 1 2 - 21382825 + 19997085 2 17584 - 740705 + 692702 @@ -26103,15 +26433,15 @@ param_location - 27592908 + 25804716 id - 27465884 + 25685925 loc - 9068 + 8480 @@ -26125,12 +26455,12 @@ 1 2 - 27379908 + 25605520 2 70 - 85976 + 80404 @@ -26146,67 +26476,67 @@ 1 2 - 759 + 710 2 25 - 694 + 649 25 62 - 715 + 669 66 134 - 694 + 649 135 214 - 694 + 649 215 384 - 694 + 649 392 552 - 694 + 649 563 857 - 694 + 649 858 1381 - 694 + 649 1388 2043 - 694 + 649 2050 3889 - 694 + 649 4077 10356 - 694 + 649 10618 96288 - 650 + 608 @@ -26570,11 +26900,11 @@ stmt_parent_top_level - 249937 + 247851 stmt - 249937 + 247851 index @@ -26582,7 +26912,7 @@ parent - 171226 + 234079 @@ -26596,7 +26926,7 @@ 1 2 - 249937 + 247851 @@ -26612,7 +26942,7 @@ 1 2 - 249937 + 247851 @@ -26626,8 +26956,8 @@ 12 - 161516 - 161517 + 247851 + 247852 1 @@ -26642,8 +26972,8 @@ 12 - 110651 - 110652 + 234079 + 234080 1 @@ -26660,22 +26990,12 @@ 1 2 - 106303 + 221368 2 - 3 - 51256 - - - 3 - 4 - 13555 - - - 4 - 6 - 111 + 5 + 12711 @@ -26691,7 +27011,7 @@ 1 2 - 171226 + 234079 @@ -26754,15 +27074,15 @@ catch_type - 19789 + 19348 catch_id - 19789 + 19348 type_id - 940 + 919 kind @@ -26780,7 +27100,7 @@ 1 2 - 19789 + 19348 @@ -26796,7 +27116,7 @@ 1 2 - 19789 + 19348 @@ -26812,57 +27132,57 @@ 1 2 - 251 + 246 2 3 - 88 + 86 3 4 - 88 + 86 4 6 - 74 + 72 6 8 - 51 + 50 8 11 - 66 + 65 11 16 - 66 + 65 16 27 - 81 + 79 30 64 - 74 + 72 65 88 - 74 + 72 98 588 - 22 + 21 @@ -26878,7 +27198,7 @@ 1 2 - 940 + 919 @@ -26930,11 +27250,11 @@ foreach_stmt_info - 20833 + 20368 id - 20833 + 20368 kind @@ -26952,7 +27272,7 @@ 1 2 - 20833 + 20368 @@ -26978,19 +27298,19 @@ foreach_stmt_desugar - 104145 + 101821 id - 20833 + 20368 symbol - 12933 + 12645 kind - 37 + 36 @@ -27004,12 +27324,12 @@ 4 5 - 22 + 21 5 6 - 20811 + 20347 @@ -27025,12 +27345,12 @@ 4 5 - 22 + 21 5 6 - 20811 + 20347 @@ -27046,37 +27366,37 @@ 1 2 - 5789 + 5660 2 3 - 2147 + 2099 3 4 - 1280 + 1252 4 5 - 1132 + 1107 5 8 - 1132 + 1107 8 17 - 1036 + 1013 17 2812 - 414 + 405 @@ -27092,7 +27412,7 @@ 1 2 - 12933 + 12645 @@ -27113,7 +27433,7 @@ 2814 2815 - 29 + 28 @@ -27159,11 +27479,11 @@ expressions - 6684202 + 6684415 id - 6684202 + 6684415 kind @@ -27171,7 +27491,7 @@ type_id - 65441 + 65429 @@ -27185,7 +27505,7 @@ 1 2 - 6684202 + 6684415 @@ -27201,7 +27521,7 @@ 1 2 - 6684202 + 6684415 @@ -27261,7 +27581,7 @@ 2916 - 12545 + 12547 102 @@ -27344,12 +27664,12 @@ 1 2 - 13085 + 13082 2 3 - 13275 + 13273 3 @@ -27359,37 +27679,37 @@ 4 5 - 4161 + 4160 5 7 - 4908 + 4907 7 10 - 4864 + 4863 10 15 - 5216 + 5215 15 26 - 5084 + 5083 26 52 - 4952 + 4951 52 235 - 4923 + 4922 236 @@ -27410,32 +27730,32 @@ 1 2 - 23152 + 23147 2 3 - 15766 + 15763 3 4 - 8806 + 8804 4 5 - 5231 + 5230 5 7 - 5949 + 5948 7 11 - 5509 + 5508 11 @@ -27450,11 +27770,11 @@
expr_parent - 6472322 + 6472448 expr - 6472322 + 6472448 index @@ -27462,7 +27782,7 @@ parent - 4333965 + 4334053 @@ -27476,7 +27796,7 @@ 1 2 - 6472322 + 6472448 @@ -27492,7 +27812,7 @@ 1 2 - 6472322 + 6472448 @@ -27537,7 +27857,7 @@ 66 - 3205672 + 3205706 489 @@ -27583,7 +27903,7 @@ 66 - 3205672 + 3205706 489 @@ -27600,17 +27920,17 @@ 1 2 - 2814626 + 2814681 2 3 - 1302935 + 1302966 3 22534 - 216404 + 216406 @@ -27626,17 +27946,17 @@ 1 2 - 2814626 + 2814681 2 3 - 1302935 + 1302966 3 22534 - 216404 + 216406 @@ -27646,19 +27966,19 @@ expr_parent_top_level - 4527920 + 4367448 expr - 4527920 + 4367448 index - 507 + 464 parent - 4069947 + 3948840 @@ -27672,7 +27992,7 @@ 1 2 - 4527920 + 4367448 @@ -27688,7 +28008,7 @@ 1 2 - 4527920 + 4367448 @@ -27704,17 +28024,17 @@ 599 600 - 169 + 154 2028 2029 - 169 + 154 - 24117 - 24118 - 169 + 25595 + 25596 + 154 @@ -27730,17 +28050,17 @@ 599 600 - 169 + 154 2028 2029 - 169 + 154 - 24038 - 24039 - 169 + 25516 + 25517 + 154 @@ -27756,17 +28076,17 @@ 1 2 - 3716436 + 3625715 2 4 - 352495 + 322196 5 6 - 1015 + 928 @@ -27782,12 +28102,12 @@ 1 2 - 3726764 + 3635155 2 4 - 343183 + 313684 @@ -27797,11 +28117,11 @@ implicitly_typed_array_creation - 19611 + 19252 id - 19611 + 19252 @@ -27819,37 +28139,37 @@ stackalloc_array_creation - 1237 + 1219 id - 1237 + 1219 implicitly_typed_object_creation - 5628 + 5534 id - 5628 + 5534 mutator_invocation_mode - 9 + 8 id - 9 + 8 mode - 9 + 8 @@ -27863,7 +28183,7 @@ 1 2 - 9 + 8 @@ -27879,7 +28199,7 @@ 1 2 - 9 + 8 @@ -27889,26 +28209,26 @@ expr_compiler_generated - 6677172 + 6677841 id - 6677172 + 6677841 expr_value - 5479081 + 5437722 id - 5479081 + 5437722 value - 203505 + 191894 @@ -27922,7 +28242,7 @@ 1 2 - 5479081 + 5437722 @@ -27938,32 +28258,32 @@ 1 2 - 105816 + 98577 2 3 - 27935 + 26153 3 4 - 36908 + 34355 4 - 10 - 16084 + 9 + 15320 - 10 - 284 - 15406 + 9 + 169 + 14546 - 362 - 8784 - 1354 + 169 + 9846 + 2940 @@ -27973,15 +28293,15 @@ expr_call - 1125744 + 1125780 caller_id - 1125744 + 1125780 target_id - 895582 + 895610 @@ -27995,7 +28315,7 @@ 1 2 - 1125744 + 1125780 @@ -28011,7 +28331,7 @@ 1 2 - 893787 + 893815 2 @@ -28026,11 +28346,11 @@ expr_access - 2484086 + 2484140 accesser_id - 2484086 + 2484140 target_id @@ -28048,7 +28368,7 @@ 1 2 - 2484086 + 2484140 @@ -28069,32 +28389,32 @@ 2 3 - 131063 + 131061 3 4 - 92421 + 92422 4 5 - 56715 + 56714 5 7 - 55161 + 55160 7 15 - 46728 + 46730 15 15109 - 18280 + 18281 @@ -28104,15 +28424,15 @@ expr_location - 6684202 + 6684415 id - 6684202 + 6684415 loc - 5325100 + 5324102 @@ -28126,7 +28446,7 @@ 1 2 - 6684202 + 6684415 @@ -28142,17 +28462,17 @@ 1 2 - 4609539 + 4608675 2 3 - 691471 + 691341 3 9205 - 24089 + 24085 @@ -28162,15 +28482,15 @@ dynamic_member_name - 6250 + 5970 id - 6250 + 5970 name - 1585 + 1514 @@ -28184,7 +28504,7 @@ 1 2 - 6250 + 5970 @@ -28200,37 +28520,37 @@ 1 2 - 663 + 634 2 3 - 285 + 273 3 4 - 165 + 158 4 5 - 147 + 140 5 7 - 119 + 114 7 18 - 119 + 114 19 35 - 82 + 79 @@ -28251,11 +28571,11 @@ expr_argument - 1381083 + 1355780 id - 1381083 + 1355780 mode @@ -28273,7 +28593,7 @@ 1 2 - 1381083 + 1355780 @@ -28302,8 +28622,8 @@ 1 - 1037143 - 1037144 + 1037144 + 1037145 1 @@ -28314,15 +28634,15 @@ expr_argument_name - 537619 + 502778 id - 537619 + 502778 name - 4338 + 4057 @@ -28336,7 +28656,7 @@ 1 2 - 537619 + 502778 @@ -28352,62 +28672,110 @@ 1 2 - 737 + 689 2 3 - 260 + 243 3 5 - 303 + 284 5 7 - 347 + 324 7 11 - 390 + 365 11 18 - 368 + 344 18 26 - 347 + 324 26 49 - 347 + 324 49 104 - 347 + 324 108 220 - 347 + 324 222 590 - 347 + 324 597 3491 - 195 + 182 + + + + + + + + + lambda_expr_return_type + 1 + + + id + 1 + + + type_id + 1 + + + + + id + type_id + + + 12 + + + 1 + 2 + 1 + + + + + + + type_id + id + + + 12 + + + 1 + 2 + 1 @@ -28417,15 +28785,15 @@ xmlEncoding - 476427 + 435475 id - 476427 + 435475 encoding - 169 + 154 @@ -28439,7 +28807,7 @@ 1 2 - 476427 + 435475 @@ -28455,7 +28823,7 @@ 2814 2815 - 169 + 154 @@ -28933,27 +29301,27 @@ xmlElements - 1042732803 + 953104665 id - 1042732803 + 953104665 name - 273937 + 250390 parentid - 385731109 + 352575577 idx - 1630078 + 1489964 fileid - 476088 + 435166 @@ -28967,7 +29335,7 @@ 1 2 - 1042732803 + 953104665 @@ -28983,7 +29351,7 @@ 1 2 - 1042732803 + 953104665 @@ -28999,7 +29367,7 @@ 1 2 - 1042732803 + 953104665 @@ -29015,7 +29383,7 @@ 1 2 - 1042732803 + 953104665 @@ -29031,32 +29399,32 @@ 1 2 - 138492 + 126588 2 3 - 50453 + 46116 3 5 - 24041 + 21974 5 8 - 23364 + 21355 8 31 - 20655 + 18879 32 1318099 - 16930 + 15475 @@ -29072,32 +29440,32 @@ 1 2 - 159486 + 145777 2 3 - 43173 + 39462 3 5 - 20316 + 18570 5 9 - 22348 + 20427 9 112 - 20655 + 18879 116 939748 - 7957 + 7273 @@ -29113,22 +29481,22 @@ 1 2 - 180310 + 164812 2 3 - 50114 + 45806 3 6 - 23872 + 21820 6 9629 - 19639 + 17951 @@ -29144,32 +29512,32 @@ 1 2 - 171337 + 156610 2 3 - 40125 + 36676 3 5 - 17607 + 16094 5 8 - 21671 + 19808 8 606 - 20655 + 18879 703 1935 - 2539 + 2321 @@ -29185,32 +29553,32 @@ 1 2 - 187348633 + 171245074 2 3 - 87399665 + 79887224 3 4 - 39675851 + 36265512 4 5 - 25725373 + 23514148 5 8 - 33529873 + 30647812 8 9629 - 12051711 + 11015805 @@ -29226,27 +29594,27 @@ 1 2 - 244193809 + 223204121 2 3 - 69983493 + 63968059 3 4 - 32247719 + 29475865 4 5 - 25493085 + 23301826 5 110 - 13813001 + 12625704 @@ -29262,32 +29630,32 @@ 1 2 - 187348633 + 171245074 2 3 - 87399665 + 79887224 3 4 - 39675851 + 36265512 4 5 - 25725373 + 23514148 5 8 - 33529873 + 30647812 8 9629 - 12051711 + 11015805 @@ -29303,7 +29671,7 @@ 1 2 - 385731109 + 352575577 @@ -29319,47 +29687,47 @@ 2 3 - 117498 + 107398 3 4 - 626601 + 572742 4 5 - 217896 + 199167 6 8 - 71447 + 65305 8 12 - 139169 + 127207 13 124 - 98197 + 89756 126 140 - 123085 + 112505 141 322 - 123254 + 112660 322 2278308 - 112927 + 103220 @@ -29375,12 +29743,12 @@ 1 2 - 1566419 + 1431777 2 641 - 63659 + 58187 @@ -29396,47 +29764,47 @@ 2 3 - 117498 + 107398 3 4 - 626601 + 572742 4 5 - 217896 + 199167 6 8 - 71447 + 65305 8 12 - 139169 + 127207 13 124 - 98197 + 89756 126 140 - 123085 + 112505 141 322 - 123254 + 112660 322 2278308 - 112927 + 103220 @@ -29452,47 +29820,47 @@ 2 3 - 117498 + 107398 3 4 - 626601 + 572742 4 5 - 217896 + 199167 6 8 - 71447 + 65305 8 12 - 139169 + 127207 13 124 - 98197 + 89756 126 140 - 123085 + 112505 141 322 - 123254 + 112660 322 2813 - 112927 + 103220 @@ -29508,72 +29876,72 @@ 1 7 - 35723 + 32652 7 11 - 38771 + 35438 11 18 - 37247 + 34045 18 43 - 35892 + 32807 43 154 - 36400 + 33271 154 440 - 35892 + 32807 443 908 - 36062 + 32962 912 1196 - 36400 + 33271 1196 2067 - 37755 + 34509 2166 2404 - 36570 + 33426 2493 3963 - 31490 + 28784 3980 4614 - 41141 + 37605 4691 24665 - 35723 + 32652 25012 81509 - 1015 + 928 @@ -29589,52 +29957,52 @@ 1 5 - 25565 + 23367 5 7 - 43342 + 39616 7 9 - 24887 + 22748 9 11 - 43680 + 39926 11 12 - 67383 + 61591 12 13 - 62304 + 56949 13 14 - 94980 + 86816 14 15 - 19470 + 17796 15 16 - 58918 + 53854 16 207 - 35554 + 32498 @@ -29650,67 +30018,67 @@ 1 4 - 29628 + 27081 4 5 - 52823 + 48283 5 7 - 42495 + 38843 7 28 - 36062 + 32962 28 90 - 40802 + 37295 94 275 - 40633 + 37140 275 408 - 32845 + 30022 420 585 - 37247 + 34045 592 811 - 35723 + 32652 813 1209 - 35723 + 32652 1209 1642 - 35723 + 32652 1648 3457 - 35892 + 32807 3640 29092 - 20486 + 18725 @@ -29726,67 +30094,67 @@ 1 3 - 38771 + 35438 3 5 - 32845 + 30022 5 8 - 44019 + 40235 8 16 - 42834 + 39152 16 51 - 36231 + 33117 51 101 - 39278 + 35902 102 173 - 35723 + 32652 173 276 - 33014 + 30176 280 283 - 37247 + 34045 283 441 - 36570 + 33426 441 514 - 40802 + 37295 518 1521 - 36570 + 33426 1526 9629 - 22179 + 20272 @@ -29796,31 +30164,31 @@ xmlAttrs - 782956405 + 715657357 id - 782956405 + 715657357 elementid - 772811588 + 706384538 name - 62135 + 56794 value - 16557621 + 15134410 idx - 2031 + 1857 fileid - 469993 + 429595 @@ -29834,7 +30202,7 @@ 1 2 - 782956405 + 715657357 @@ -29850,7 +30218,7 @@ 1 2 - 782956405 + 715657357 @@ -29866,7 +30234,7 @@ 1 2 - 782956405 + 715657357 @@ -29882,7 +30250,7 @@ 1 2 - 782956405 + 715657357 @@ -29898,7 +30266,7 @@ 1 2 - 782956405 + 715657357 @@ -29914,12 +30282,12 @@ 1 2 - 767712937 + 701724142 2 13 - 5098651 + 4660396 @@ -29935,12 +30303,12 @@ 1 2 - 767712937 + 701724142 2 13 - 5098651 + 4660396 @@ -29956,12 +30324,12 @@ 1 2 - 767716323 + 701727237 2 13 - 5095264 + 4657301 @@ -29977,12 +30345,12 @@ 1 2 - 767712937 + 701724142 2 13 - 5098651 + 4660396 @@ -29998,7 +30366,7 @@ 1 2 - 772811588 + 706384538 @@ -30014,62 +30382,62 @@ 1 2 - 9311 + 8511 2 3 - 7449 + 6809 3 4 - 5587 + 5106 4 6 - 4909 + 4487 6 8 - 4232 + 3868 8 12 - 4740 + 4333 12 18 - 4909 + 4487 18 25 - 5079 + 4642 26 49 - 4740 + 4333 50 151 - 4740 + 4333 152 1240 - 4740 + 4333 1931 2721615 - 1693 + 1547 @@ -30085,62 +30453,62 @@ 1 2 - 9311 + 8511 2 3 - 7449 + 6809 3 4 - 5587 + 5106 4 6 - 4909 + 4487 6 8 - 4232 + 3868 8 12 - 4740 + 4333 12 18 - 4909 + 4487 18 25 - 5079 + 4642 26 49 - 4740 + 4333 50 151 - 4740 + 4333 152 1240 - 4740 + 4333 1931 2721615 - 1693 + 1547 @@ -30156,42 +30524,42 @@ 1 2 - 28612 + 26153 2 3 - 7618 + 6963 3 4 - 6095 + 5571 4 6 - 4571 + 4178 6 10 - 4909 + 4487 10 21 - 4740 + 4333 23 572 - 4740 + 4333 939 90061 - 846 + 773 @@ -30207,22 +30575,22 @@ 1 2 - 40802 + 37295 2 3 - 13883 + 12689 3 4 - 5417 + 4952 4 7 - 2031 + 1857 @@ -30238,52 +30606,52 @@ 1 2 - 20147 + 18415 2 3 - 10496 + 9594 3 4 - 6772 + 6190 4 5 - 2031 + 1857 5 6 - 4571 + 4178 6 7 - 3216 + 2940 7 13 - 5079 + 4642 14 27 - 4740 + 4333 28 626 - 4740 + 4333 1892 1995 - 338 + 309 @@ -30299,42 +30667,42 @@ 1 2 - 4011875 + 3667034 2 3 - 1419292 + 1297297 3 4 - 5374619 + 4912644 4 6 - 795907 + 727495 6 8 - 1488538 + 1360591 8 27 - 1245584 + 1138520 27 90 - 1243044 + 1136198 90 214809 - 978758 + 894628 @@ -30350,42 +30718,42 @@ 1 2 - 4012891 + 3667963 2 3 - 1419123 + 1297142 3 4 - 5374958 + 4912953 4 6 - 797092 + 728578 6 8 - 1488030 + 1360126 8 27 - 1244060 + 1137127 27 90 - 1242875 + 1136044 90 214809 - 978588 + 894474 @@ -30401,17 +30769,17 @@ 1 2 - 14765517 + 13496346 2 3 - 1766200 + 1614386 3 58 - 25903 + 23677 @@ -30427,12 +30795,12 @@ 1 2 - 16464672 + 15049451 2 11 - 92949 + 84959 @@ -30448,37 +30816,37 @@ 1 2 - 4652021 + 4252157 2 3 - 1284016 + 1173649 3 4 - 6041177 + 5521908 4 6 - 779992 + 712948 6 8 - 1312291 + 1199493 8 44 - 1256927 + 1148888 44 1527 - 1231193 + 1125366 @@ -30494,62 +30862,62 @@ 7 8 - 169 + 154 40 41 - 169 + 154 49 50 - 169 + 154 59 60 - 169 + 154 115 116 - 169 + 154 290 291 - 169 + 154 1094 1095 - 169 + 154 1293 1294 - 169 + 154 1835 1836 - 169 + 154 25023 25024 - 169 + 154 30115 30116 - 169 + 154 4564584 4564585 - 169 + 154 @@ -30565,62 +30933,62 @@ 7 8 - 169 + 154 40 41 - 169 + 154 49 50 - 169 + 154 59 60 - 169 + 154 115 116 - 169 + 154 290 291 - 169 + 154 1094 1095 - 169 + 154 1293 1294 - 169 + 154 1835 1836 - 169 + 154 25023 25024 - 169 + 154 30115 30116 - 169 + 154 4564584 4564585 - 169 + 154 @@ -30636,62 +31004,62 @@ 1 2 - 169 + 154 4 5 - 169 + 154 5 6 - 169 + 154 6 7 - 169 + 154 11 12 - 169 + 154 20 21 - 169 + 154 28 29 - 169 + 154 42 43 - 169 + 154 65 66 - 169 + 154 101 102 - 169 + 154 122 123 - 169 + 154 147 148 - 169 + 154 @@ -30707,62 +31075,62 @@ 4 5 - 169 + 154 9 10 - 169 + 154 12 13 - 169 + 154 17 18 - 169 + 154 19 20 - 169 + 154 32 33 - 169 + 154 51 52 - 169 + 154 101 102 - 169 + 154 163 164 - 169 + 154 582 583 - 169 + 154 1859 1860 - 169 + 154 95586 95587 - 169 + 154 @@ -30778,57 +31146,57 @@ 1 2 - 169 + 154 2 3 - 338 + 309 4 5 - 169 + 154 11 12 - 169 + 154 21 22 - 169 + 154 30 31 - 169 + 154 54 55 - 169 + 154 291 292 - 169 + 154 790 791 - 169 + 154 999 1000 - 169 + 154 2776 2777 - 169 + 154 @@ -30844,67 +31212,67 @@ 1 4 - 42326 + 38688 4 7 - 33691 + 30795 7 14 - 35554 + 32498 14 52 - 37416 + 34200 52 118 - 37078 + 33890 119 426 - 35892 + 32807 429 711 - 42157 + 38533 711 1058 - 35384 + 32343 1065 1732 - 41818 + 38224 1760 2645 - 39448 + 36057 2683 3223 - 42495 + 38843 3367 14933 - 28782 + 26308 14940 63855 - 17946 + 16403 @@ -30920,67 +31288,67 @@ 1 3 - 36908 + 33736 3 6 - 39956 + 36521 6 12 - 38601 + 35283 12 44 - 35384 + 32343 44 118 - 36570 + 33426 122 426 - 37755 + 34509 429 700 - 33522 + 30641 701 856 - 37078 + 33890 859 1729 - 32506 + 29712 1731 1901 - 37755 + 34509 1916 2997 - 43173 + 39462 3025 5540 - 37755 + 34509 5591 63855 - 23025 + 21046 @@ -30996,42 +31364,42 @@ 1 2 - 22179 + 20272 2 3 - 196225 + 179359 3 4 - 92102 + 84185 4 5 - 24887 + 22748 5 6 - 45881 + 41938 6 8 - 36570 + 33426 8 10 - 36062 + 32962 10 71 - 16084 + 14701 @@ -31047,67 +31415,67 @@ 1 4 - 43003 + 39307 4 7 - 35384 + 32343 7 14 - 37078 + 33890 14 31 - 35723 + 32652 31 67 - 35892 + 32807 67 131 - 37078 + 33890 131 209 - 35384 + 32343 210 339 - 34369 + 31414 339 366 - 38601 + 35283 368 522 - 35723 + 32652 527 622 - 41649 + 38069 625 1542 - 35554 + 32498 1581 10804 - 24549 + 22439 @@ -31123,27 +31491,27 @@ 1 2 - 300856 + 274996 2 3 - 35384 + 32343 3 4 - 84483 + 77221 4 5 - 40125 + 36676 5 13 - 9142 + 8356 @@ -31153,23 +31521,23 @@ xmlNs - 27088 + 24760 id - 3047 + 2785 prefixName - 1862 + 1702 URI - 3047 + 2785 fileid - 19470 + 17796 @@ -31183,12 +31551,12 @@ 1 2 - 2878 + 2630 2 3 - 169 + 154 @@ -31204,7 +31572,7 @@ 1 2 - 3047 + 2785 @@ -31220,52 +31588,52 @@ 1 2 - 507 + 464 2 3 - 1185 + 1083 3 4 - 169 + 154 6 7 - 169 + 154 8 9 - 169 + 154 9 10 - 169 + 154 15 16 - 169 + 154 18 19 - 169 + 154 32 33 - 169 + 154 49 50 - 169 + 154 @@ -31281,12 +31649,12 @@ 1 2 - 1693 + 1547 9 10 - 169 + 154 @@ -31302,12 +31670,12 @@ 1 2 - 1693 + 1547 9 10 - 169 + 154 @@ -31323,37 +31691,37 @@ 1 2 - 338 + 309 2 3 - 677 + 619 3 4 - 169 + 154 6 7 - 169 + 154 8 9 - 169 + 154 9 10 - 169 + 154 101 102 - 169 + 154 @@ -31369,7 +31737,7 @@ 1 2 - 3047 + 2785 @@ -31385,12 +31753,12 @@ 1 2 - 2878 + 2630 2 3 - 169 + 154 @@ -31406,52 +31774,52 @@ 1 2 - 507 + 464 2 3 - 1185 + 1083 3 4 - 169 + 154 6 7 - 169 + 154 8 9 - 169 + 154 9 10 - 169 + 154 15 16 - 169 + 154 18 19 - 169 + 154 32 33 - 169 + 154 49 50 - 169 + 154 @@ -31467,17 +31835,17 @@ 1 2 - 15068 + 13773 2 3 - 3894 + 3559 6 9 - 507 + 464 @@ -31493,17 +31861,17 @@ 1 2 - 17607 + 16094 2 6 - 1523 + 1392 6 7 - 338 + 309 @@ -31519,17 +31887,17 @@ 1 2 - 15068 + 13773 2 3 - 3894 + 3559 6 9 - 507 + 464 @@ -31539,19 +31907,19 @@ xmlHasNs - 513335 + 469212 elementId - 513335 + 469212 nsId - 2878 + 2630 fileid - 17607 + 16094 @@ -31565,7 +31933,7 @@ 1 2 - 513335 + 469212 @@ -31581,7 +31949,7 @@ 1 2 - 513335 + 469212 @@ -31597,77 +31965,77 @@ 2 3 - 338 + 309 3 4 - 169 + 154 4 5 - 338 + 309 6 7 - 169 + 154 8 9 - 169 + 154 12 13 - 169 + 154 14 15 - 169 + 154 15 16 - 169 + 154 16 17 - 169 + 154 24 25 - 169 + 154 48 49 - 169 + 154 136 137 - 169 + 154 420 421 - 169 + 154 719 720 - 169 + 154 1599 1600 - 169 + 154 @@ -31683,37 +32051,37 @@ 1 2 - 677 + 619 2 3 - 1185 + 1083 3 4 - 338 + 309 15 16 - 169 + 154 18 19 - 169 + 154 32 33 - 169 + 154 49 50 - 169 + 154 @@ -31729,62 +32097,62 @@ 1 2 - 677 + 619 2 3 - 1015 + 928 3 4 - 1185 + 1083 4 5 - 1862 + 1702 5 8 - 1354 + 1238 8 12 - 1354 + 1238 14 21 - 1354 + 1238 21 23 - 338 + 309 25 26 - 2878 + 2630 26 27 - 3047 + 2785 27 67 - 1354 + 1238 70 497 - 1185 + 1083 @@ -31800,17 +32168,17 @@ 1 2 - 14560 + 13308 2 3 - 2539 + 2321 6 9 - 507 + 464 @@ -31820,23 +32188,23 @@ xmlComments - 201474 + 184156 id - 201474 + 184156 text - 150513 + 137575 parentid - 105816 + 96720 fileid - 52484 + 47973 @@ -31850,7 +32218,7 @@ 1 2 - 201474 + 184156 @@ -31866,7 +32234,7 @@ 1 2 - 201474 + 184156 @@ -31882,7 +32250,7 @@ 1 2 - 201474 + 184156 @@ -31898,17 +32266,17 @@ 1 2 - 132058 + 120707 2 3 - 11512 + 10523 3 24 - 6941 + 6344 @@ -31924,17 +32292,17 @@ 1 2 - 132397 + 121017 2 3 - 11512 + 10523 3 24 - 6602 + 6035 @@ -31950,17 +32318,17 @@ 1 2 - 133243 + 121790 2 3 - 10835 + 9904 3 24 - 6433 + 5880 @@ -31976,27 +32344,27 @@ 1 2 - 74325 + 67936 2 3 - 14729 + 13463 3 4 - 5756 + 5261 4 7 - 8803 + 8047 7 107 - 2200 + 2011 @@ -32012,27 +32380,27 @@ 1 2 - 74663 + 68246 2 3 - 14560 + 13308 3 4 - 5587 + 5106 4 7 - 8803 + 8047 7 107 - 2200 + 2011 @@ -32048,7 +32416,7 @@ 1 2 - 105816 + 96720 @@ -32064,37 +32432,37 @@ 1 2 - 23533 + 21510 2 3 - 8126 + 7428 3 4 - 7280 + 6654 4 6 - 4232 + 3868 6 7 - 3894 + 3559 7 21 - 4232 + 3868 21 108 - 1185 + 1083 @@ -32110,37 +32478,37 @@ 1 2 - 23533 + 21510 2 3 - 8295 + 7582 3 4 - 7449 + 6809 4 6 - 3894 + 3559 6 7 - 3894 + 3559 7 17 - 4063 + 3714 19 108 - 1354 + 1238 @@ -32156,27 +32524,27 @@ 1 2 - 27935 + 25534 2 3 - 11174 + 10213 3 4 - 7788 + 7118 4 7 - 4063 + 3714 7 16 - 1523 + 1392 @@ -32186,31 +32554,31 @@ xmlChars - 808542609 + 739044298 id - 808542609 + 739044298 text - 49726704 + 45452443 parentid - 487105125 + 445235986 idx - 6264 + 5725 isCDATA - 338 + 309 fileid - 448830 + 410251 @@ -32224,7 +32592,7 @@ 1 2 - 808542609 + 739044298 @@ -32240,7 +32608,7 @@ 1 2 - 808542609 + 739044298 @@ -32256,7 +32624,7 @@ 1 2 - 808542609 + 739044298 @@ -32272,7 +32640,7 @@ 1 2 - 808542609 + 739044298 @@ -32288,7 +32656,7 @@ 1 2 - 808542609 + 739044298 @@ -32304,57 +32672,57 @@ 1 2 - 6839117 + 6251260 2 3 - 2738525 + 2503134 3 4 - 10689136 + 9770350 4 6 - 3529014 + 3225678 6 7 - 4911398 + 4489239 7 9 - 3937211 + 3598788 9 10 - 893258 + 816478 10 11 - 7086473 + 6477355 11 20 - 3458922 + 3161610 20 49 - 3805830 + 3478699 49 250680 - 1837816 + 1679847 @@ -32370,57 +32738,57 @@ 1 2 - 6839963 + 6252034 2 3 - 2739540 + 2504063 3 4 - 10692860 + 9773755 4 6 - 3530369 + 3226916 6 7 - 4916308 + 4493726 7 9 - 3942121 + 3603276 9 10 - 893935 + 817097 10 11 - 7101541 + 6491128 11 20 - 3452827 + 3156039 20 49 - 3788730 + 3463069 49 249267 - 1828505 + 1671335 @@ -32436,12 +32804,12 @@ 1 2 - 48571867 + 44396871 2 32 - 1154836 + 1055572 @@ -32457,7 +32825,7 @@ 1 2 - 49726704 + 45452443 @@ -32473,47 +32841,47 @@ 1 2 - 8926152 + 8158904 2 3 - 2072305 + 1894180 3 4 - 13690085 + 12513353 4 5 - 3843754 + 3513364 5 7 - 4406528 + 4027764 7 9 - 4286490 + 3918044 9 10 - 688059 + 628917 10 11 - 9242416 + 8447983 11 1537 - 2570912 + 2349929 @@ -32529,22 +32897,22 @@ 1 2 - 285652284 + 261099031 2 3 - 137381514 + 125572881 3 4 - 41081769 + 37550584 4 38 - 22989557 + 21013489 @@ -32560,22 +32928,22 @@ 1 2 - 285652284 + 261099031 2 3 - 137537614 + 125715563 3 4 - 41794886 + 38202405 4 28 - 22120340 + 20218985 @@ -32591,22 +32959,22 @@ 1 2 - 285652284 + 261099031 2 3 - 137381514 + 125572881 3 4 - 41081769 + 37550584 4 38 - 22989557 + 21013489 @@ -32622,12 +32990,12 @@ 1 2 - 487104109 + 445235057 2 3 - 1015 + 928 @@ -32643,7 +33011,7 @@ 1 2 - 487105125 + 445235986 @@ -32659,62 +33027,62 @@ 4 93 - 507 + 464 112 113 - 846 + 773 192 405 - 507 + 464 407 408 - 507 + 464 410 603 - 507 + 464 606 706 - 507 + 464 829 1318 - 507 + 464 1676 3066 - 507 + 464 4678 9764 - 507 + 464 15737 41748 - 507 + 464 72968 378436 - 507 + 464 1189874 2877070 - 338 + 309 @@ -32730,67 +33098,67 @@ 1 5 - 507 + 464 10 12 - 507 + 464 12 15 - 507 + 464 16 25 - 338 + 309 27 28 - 507 + 464 31 42 - 338 + 309 43 48 - 507 + 464 57 101 - 507 + 464 116 190 - 507 + 464 212 326 - 507 + 464 514 1287 - 507 + 464 1884 5896 - 507 + 464 14913 215009 - 507 + 464 @@ -32806,62 +33174,62 @@ 4 93 - 507 + 464 112 113 - 846 + 773 192 405 - 507 + 464 407 408 - 507 + 464 410 603 - 507 + 464 606 706 - 507 + 464 829 1318 - 507 + 464 1676 3066 - 507 + 464 4678 9764 - 507 + 464 15737 41748 - 507 + 464 72968 378436 - 507 + 464 1189874 2877070 - 338 + 309 @@ -32877,12 +33245,12 @@ 1 2 - 5756 + 5261 2 3 - 507 + 464 @@ -32898,52 +33266,52 @@ 4 85 - 507 + 464 104 105 - 846 + 773 184 185 - 169 + 154 187 188 - 1693 + 1547 195 208 - 507 + 464 237 306 - 507 + 464 314 464 - 507 + 464 577 902 - 507 + 464 1138 1614 - 507 + 464 1802 2652 - 507 + 464 @@ -32959,12 +33327,12 @@ 10 11 - 169 + 154 4775618 4775619 - 169 + 154 @@ -32980,12 +33348,12 @@ 6 7 - 169 + 154 293703 293704 - 169 + 154 @@ -33001,12 +33369,12 @@ 10 11 - 169 + 154 2877065 2877066 - 169 + 154 @@ -33022,12 +33390,12 @@ 3 4 - 169 + 154 37 38 - 169 + 154 @@ -33043,12 +33411,12 @@ 6 7 - 169 + 154 2651 2652 - 169 + 154 @@ -33064,72 +33432,72 @@ 1 2 - 25395 + 23212 2 4 - 36062 + 32962 4 8 - 39617 + 36212 8 38 - 33691 + 30795 38 131 - 34538 + 31569 131 418 - 33691 + 30795 418 703 - 34030 + 31105 712 997 - 34538 + 31569 997 1714 - 34199 + 31260 1728 1931 - 33691 + 30795 1934 2772 - 33861 + 30950 2780 3897 - 34369 + 31414 3910 16366 - 34877 + 31879 16370 65499 - 6264 + 5725 @@ -33145,72 +33513,72 @@ 1 2 - 26073 + 23832 2 4 - 39956 + 36521 4 7 - 39448 + 36057 7 37 - 35384 + 32343 37 90 - 35723 + 32652 90 221 - 34030 + 31105 221 363 - 33691 + 30795 367 493 - 33861 + 30950 494 651 - 34030 + 31105 652 779 - 34199 + 31260 783 1025 - 33861 + 30950 1027 1649 - 34199 + 31260 1649 6117 - 33691 + 30795 10014 18709 - 677 + 619 @@ -33226,67 +33594,67 @@ 1 2 - 25395 + 23212 2 4 - 36062 + 32962 4 8 - 39786 + 36367 8 34 - 34030 + 31105 34 102 - 36570 + 33426 103 304 - 35723 + 32652 317 471 - 34707 + 31724 478 643 - 35892 + 32807 645 976 - 37416 + 34200 1012 1449 - 33691 + 30795 1453 1973 - 39278 + 35902 1995 2720 - 33861 + 30950 2837 36365 - 26411 + 24141 @@ -33302,57 +33670,57 @@ 1 2 - 128503 + 117457 2 3 - 15237 + 13927 3 4 - 31998 + 29248 4 5 - 34877 + 31879 5 6 - 45543 + 41628 6 7 - 40125 + 36676 7 8 - 30475 + 27855 8 9 - 24380 + 22284 9 11 - 34707 + 31724 11 29 - 31829 + 29093 29 38 - 31152 + 28474 @@ -33368,12 +33736,12 @@ 1 2 - 447814 + 409322 2 3 - 1015 + 928 @@ -33383,15 +33751,15 @@ xmllocations - 46972668 + 45859268 xmlElement - 46969994 + 45856658 location - 39595172 + 38656642 @@ -33405,12 +33773,12 @@ 1 2 - 46969909 + 45856575 29 37 - 84 + 82 @@ -33426,17 +33794,17 @@ 1 2 - 32374448 + 31607072 2 3 - 7172682 + 7002667 3 13 - 48041 + 46902 @@ -33446,11 +33814,11 @@ commentline - 1227125 + 1225829 id - 1227125 + 1225829 kind @@ -33458,11 +33826,11 @@ text - 47658 + 47606 rawtext - 47747 + 47695 @@ -33476,7 +33844,7 @@ 1 2 - 1227125 + 1225829 @@ -33492,7 +33860,7 @@ 1 2 - 1227125 + 1225829 @@ -33508,7 +33876,7 @@ 1 2 - 1227125 + 1225829 @@ -33527,8 +33895,8 @@ 2 - 6153 - 6154 + 6150 + 6151 2 @@ -33553,8 +33921,8 @@ 2 - 661 - 662 + 660 + 661 2 @@ -33579,8 +33947,8 @@ 2 - 664 - 665 + 663 + 664 2 @@ -33602,27 +33970,27 @@ 1 2 - 19920 + 19899 2 3 - 14574 + 14559 3 5 - 4091 + 4084 5 6 - 6975 + 6967 6 170013 - 2097 + 2095 @@ -33638,7 +34006,7 @@ 1 2 - 47651 + 47599 2 @@ -33659,7 +34027,7 @@ 1 2 - 47595 + 47542 2 @@ -33680,27 +34048,27 @@ 1 2 - 19990 + 19969 2 3 - 14607 + 14592 3 5 - 4067 + 4061 5 6 - 6979 + 6972 6 170013 - 2101 + 2099 @@ -33716,7 +34084,7 @@ 1 2 - 47747 + 47695 @@ -33732,7 +34100,7 @@ 1 2 - 47747 + 47695 @@ -33742,15 +34110,15 @@ commentline_location - 1227125 + 1225829 id - 1227125 + 1225829 loc - 1227125 + 1225829 @@ -33764,7 +34132,7 @@ 1 2 - 1227125 + 1225829 @@ -33780,7 +34148,7 @@ 1 2 - 1227125 + 1225829 @@ -33790,26 +34158,26 @@ commentblock - 412295 + 411862 id - 412295 + 411862 commentblock_location - 412295 + 411862 id - 412295 + 411862 loc - 412295 + 411862 @@ -33823,7 +34191,7 @@ 1 2 - 412295 + 411862 @@ -33839,7 +34207,7 @@ 1 2 - 412295 + 411862 @@ -33849,15 +34217,15 @@ commentblock_binding - 1601076 + 1599395 id - 412295 + 411862 entity - 415903 + 415466 bindtype @@ -33875,12 +34243,12 @@ 1 3 - 23919 + 23894 3 4 - 388376 + 387968 @@ -33896,12 +34264,12 @@ 1 4 - 23919 + 23894 4 5 - 388376 + 387968 @@ -33917,17 +34285,17 @@ 1 2 - 29380 + 29349 2 3 - 379364 + 378966 3 6405 - 7158 + 7150 @@ -33943,22 +34311,22 @@ 1 2 - 20286 + 20265 2 3 - 46749 + 46700 3 4 - 345374 + 345011 4 5 - 3492 + 3488 @@ -34030,15 +34398,15 @@ commentblock_child - 1631670 + 1629950 id - 412295 + 411862 commentline - 1227125 + 1225829 index @@ -34056,17 +34424,17 @@ 1 3 - 11817 + 11805 3 4 - 397465 + 397047 4 40 - 3013 + 3009 @@ -34082,17 +34450,17 @@ 1 4 - 15521 + 15505 4 5 - 393789 + 393376 5 41 - 2984 + 2981 @@ -34108,7 +34476,7 @@ 1 2 - 1227125 + 1225829 @@ -34124,12 +34492,12 @@ 1 2 - 822579 + 821708 2 3 - 404545 + 404120 @@ -34179,7 +34547,7 @@ 110 - 180 + 177 7 @@ -34245,7 +34613,7 @@ 110 - 180 + 177 7 @@ -35906,23 +36274,23 @@ cil_instruction - 370457925 + 346449953 id - 370457925 + 346449953 opcode - 4469 + 4179 index - 1246867 + 1166062 impl - 17616232 + 16474590 @@ -35936,7 +36304,7 @@ 1 2 - 370457925 + 346449953 @@ -35952,7 +36320,7 @@ 1 2 - 370457925 + 346449953 @@ -35968,7 +36336,7 @@ 1 2 - 370457925 + 346449953 @@ -35984,67 +36352,67 @@ 1 16 - 368 + 344 17 69 - 347 + 324 70 213 - 347 + 324 224 594 - 347 + 324 636 1221 - 347 + 324 1221 2818 - 347 + 324 2880 5863 - 347 + 324 6467 11024 - 347 + 324 11313 24194 - 347 + 324 25681 54307 - 347 + 324 61088 131396 - 347 + 324 142955 338976 - 347 + 324 356037 1814450 - 282 + 263 @@ -36060,67 +36428,67 @@ 1 9 - 347 + 324 9 36 - 347 + 324 41 78 - 347 + 324 86 183 - 347 + 324 185 277 - 347 + 324 282 422 - 347 + 324 422 588 - 347 + 324 588 731 - 347 + 324 740 1050 - 347 + 324 1089 1464 - 347 + 324 1470 3025 - 347 + 324 3171 5912 - 347 + 324 6769 25364 - 303 + 284 @@ -36136,67 +36504,67 @@ 1 12 - 368 + 344 12 33 - 347 + 324 35 81 - 347 + 324 92 317 - 347 + 324 330 719 - 347 + 324 778 1306 - 347 + 324 1376 2365 - 347 + 324 2467 5519 - 347 + 324 6012 11497 - 347 + 324 14453 27062 - 347 + 324 27870 52923 - 347 + 324 58946 131744 - 347 + 324 142502 803354 - 282 + 263 @@ -36212,52 +36580,52 @@ 1 2 - 258602 + 241843 2 3 - 4252 + 3976 3 4 - 343038 + 320807 4 5 - 85369 + 79836 5 6 - 150670 + 140906 6 15 - 61179 + 57214 15 16 - 106651 + 99740 16 20 - 106283 + 99395 20 126 - 93591 + 87526 126 812002 - 37228 + 34815 @@ -36273,42 +36641,42 @@ 1 2 - 523930 + 489976 2 3 - 180783 + 169067 3 4 - 112097 + 104832 4 7 - 74847 + 69996 7 9 - 112032 + 104771 9 11 - 95544 + 89352 11 29 - 95110 + 88946 29 177 - 52523 + 49119 @@ -36324,52 +36692,52 @@ 1 2 - 258602 + 241843 2 3 - 4252 + 3976 3 4 - 343038 + 320807 4 5 - 85369 + 79836 5 6 - 150670 + 140906 6 15 - 61179 + 57214 15 16 - 106651 + 99740 16 20 - 106283 + 99395 20 126 - 93591 + 87526 126 812002 - 37228 + 34815 @@ -36385,57 +36753,57 @@ 1 3 - 1299000 + 1214816 3 4 - 3887975 + 3636010 4 5 - 1827117 + 1708709 5 6 - 1190309 + 1113169 6 8 - 1392721 + 1302464 8 11 - 1390270 + 1300172 11 16 - 1446286 + 1352558 16 23 - 1331976 + 1245656 23 35 - 1364214 + 1275805 35 67 - 1341326 + 1254400 67 57474 - 1145031 + 1070826 @@ -36451,52 +36819,52 @@ 1 3 - 1301668 + 1217312 3 4 - 4029621 + 3768476 4 5 - 2083919 + 1948868 5 6 - 1825208 + 1706923 6 7 - 1176164 + 1099941 7 9 - 1560900 + 1459744 9 12 - 1593160 + 1489913 12 16 - 1494535 + 1397680 16 24 - 1379835 + 1290413 24 77 - 1171217 + 1095315 @@ -36512,57 +36880,57 @@ 1 3 - 1299000 + 1214816 3 4 - 3887975 + 3636010 4 5 - 1827117 + 1708709 5 6 - 1190309 + 1113169 6 8 - 1392721 + 1302464 8 11 - 1390270 + 1300172 11 16 - 1446286 + 1352558 16 23 - 1331976 + 1245656 23 35 - 1364214 + 1275805 35 67 - 1341326 + 1254400 67 57474 - 1145031 + 1070826 @@ -36572,15 +36940,15 @@ cil_jump - 28397526 + 26557190 instruction - 28397526 + 26557190 target - 21559074 + 20161912 @@ -36594,7 +36962,7 @@ 1 2 - 28397526 + 26557190 @@ -36610,17 +36978,17 @@ 1 2 - 17986194 + 16820577 2 3 - 2350917 + 2198563 3 473 - 1221961 + 1142771 @@ -36630,15 +36998,15 @@ cil_access - 150867069 + 141089947 instruction - 150867069 + 141089947 target - 35942557 + 33613257 @@ -36652,7 +37020,7 @@ 1 2 - 150867069 + 141089947 @@ -36668,32 +37036,32 @@ 1 2 - 14815601 + 13855458 2 3 - 9023556 + 8438774 3 4 - 4374395 + 4090907 4 5 - 2253833 + 2107771 5 8 - 3030508 + 2834113 8 72956 - 2444661 + 2286232 @@ -36703,15 +37071,15 @@ cil_value - 14528513 + 13586976 instruction - 14528513 + 13586976 value - 3617224 + 3382805 @@ -36725,7 +37093,7 @@ 1 2 - 14528513 + 13586976 @@ -36741,22 +37109,22 @@ 1 2 - 2708882 + 2533330 2 3 - 497180 + 464960 3 7 - 273506 + 255781 7 182148 - 137653 + 128732 @@ -36766,19 +37134,19 @@ cil_switch - 2990395 + 2796598 instruction - 200330 + 187347 index - 103961 + 97224 target - 1319002 + 1233523 @@ -36792,52 +37160,52 @@ 2 3 - 5011 + 4686 3 4 - 55126 + 51554 4 5 - 33778 + 31589 5 6 - 23842 + 22297 6 7 - 13103 + 12254 7 8 - 11324 + 10590 8 11 - 17247 + 16129 11 16 - 15815 + 14790 16 32 - 15164 + 14181 32 4793 - 9914 + 9272 @@ -36853,42 +37221,42 @@ 1 2 - 4122 + 3854 2 3 - 24493 + 22906 3 4 - 71202 + 66588 4 5 - 40048 + 37453 5 6 - 18310 + 17123 6 8 - 17529 + 16393 8 15 - 15576 + 14567 15 2160 - 9046 + 8460 @@ -36904,32 +37272,32 @@ 1 6 - 2907 + 2718 6 7 - 51785 + 48429 7 8 - 32780 + 30656 8 15 - 8157 + 7628 15 655 - 7810 + 7303 688 9235 - 520 + 486 @@ -36945,32 +37313,32 @@ 1 6 - 2907 + 2718 6 7 - 51785 + 48429 7 8 - 32780 + 30656 8 15 - 8157 + 7628 15 645 - 7810 + 7303 675 8900 - 520 + 486 @@ -36986,12 +37354,12 @@ 1 2 - 1301581 + 1217231 2 18 - 17420 + 16291 @@ -37007,17 +37375,17 @@ 1 2 - 1172671 + 1096674 2 6 - 103896 + 97163 6 2934 - 42435 + 39685 @@ -37069,15 +37437,15 @@ cil_type_location - 3557541 + 3326990 id - 3557541 + 3326990 loc - 10717 + 10022 @@ -37091,7 +37459,7 @@ 1 2 - 3557541 + 3326990 @@ -37107,57 +37475,57 @@ 1 2 - 2429 + 2272 2 10 - 824 + 770 10 21 - 846 + 791 21 41 - 911 + 852 41 71 - 846 + 791 71 105 - 824 + 770 105 159 - 824 + 770 160 303 - 824 + 770 303 484 - 824 + 770 486 1178 - 824 + 770 1182 9017 - 737 + 689 @@ -37167,15 +37535,15 @@ cil_method_location - 21566732 + 20169074 id - 21566732 + 20169074 loc - 8287 + 7750 @@ -37189,7 +37557,7 @@ 1 2 - 21566732 + 20169074 @@ -37205,72 +37573,72 @@ 2 26 - 629 + 588 30 52 - 629 + 588 54 120 - 629 + 588 120 194 - 629 + 588 197 288 - 629 + 588 288 444 - 629 + 588 453 638 - 629 + 588 639 875 - 629 + 588 887 1378 - 629 + 588 1394 1994 - 629 + 588 2017 3547 - 629 + 588 3606 7233 - 629 + 588 7362 30109 - 629 + 588 30700 50470 - 108 + 101 @@ -37280,27 +37648,27 @@ cil_type - 9109554 + 8519199 id - 9109554 + 8519199 name - 2569536 + 2403014 kind - 108 + 101 parent - 1843605 + 1724128 sourceDecl - 5094751 + 4764579 @@ -37314,7 +37682,7 @@ 1 2 - 9109554 + 8519199 @@ -37330,7 +37698,7 @@ 1 2 - 9109554 + 8519199 @@ -37346,7 +37714,7 @@ 1 2 - 9109554 + 8519199 @@ -37362,7 +37730,7 @@ 1 2 - 9109554 + 8519199 @@ -37378,17 +37746,17 @@ 1 2 - 2257716 + 2111402 2 4 - 215147 + 201204 4 45085 - 96672 + 90407 @@ -37404,7 +37772,7 @@ 1 2 - 2569536 + 2403014 @@ -37420,17 +37788,17 @@ 1 2 - 2374652 + 2220759 2 48 - 192780 + 180286 48 45085 - 2104 + 1968 @@ -37446,17 +37814,17 @@ 1 2 - 2346600 + 2194526 2 5 - 199787 + 186840 5 45085 - 23148 + 21648 @@ -37472,27 +37840,27 @@ 92 93 - 21 + 20 493 494 - 21 + 20 6156 6157 - 21 + 20 60060 60061 - 21 + 20 353094 353095 - 21 + 20 @@ -37508,27 +37876,27 @@ 42 43 - 21 + 20 92 93 - 21 + 20 470 471 - 21 + 20 3045 3046 - 21 + 20 114791 114792 - 21 + 20 @@ -37544,22 +37912,22 @@ 1 2 - 43 + 40 80 81 - 21 + 20 41127 41128 - 21 + 20 45084 45085 - 21 + 20 @@ -37575,27 +37943,27 @@ 92 93 - 21 + 20 493 494 - 21 + 20 5383 5384 - 21 + 20 60060 60061 - 21 + 20 168809 168810 - 21 + 20 @@ -37611,27 +37979,27 @@ 1 2 - 1199269 + 1121549 2 3 - 338526 + 316587 3 5 - 144574 + 135205 5 28 - 138868 + 129869 28 56074 - 22367 + 20917 @@ -37647,27 +38015,27 @@ 1 2 - 1205690 + 1127554 2 3 - 343928 + 321639 3 5 - 144596 + 135225 5 38 - 138608 + 129625 38 3428 - 10782 + 10083 @@ -37683,12 +38051,12 @@ 1 2 - 1815142 + 1697509 2 4 - 28463 + 26619 @@ -37704,27 +38072,27 @@ 1 2 - 1205300 + 1127189 2 3 - 343798 + 321517 3 5 - 144596 + 135225 5 38 - 138630 + 129645 38 6279 - 11281 + 10550 @@ -37740,12 +38108,12 @@ 1 2 - 4875221 + 4559276 2 23276 - 219530 + 205303 @@ -37761,7 +38129,7 @@ 1 2 - 5094751 + 4764579 @@ -37777,7 +38145,7 @@ 1 2 - 5094751 + 4764579 @@ -37793,12 +38161,12 @@ 1 2 - 5022811 + 4697301 2 1652 - 71940 + 67277 @@ -37808,15 +38176,15 @@ cil_pointer_type - 10695 + 10002 id - 10695 + 10002 pointee - 10695 + 10002 @@ -37830,7 +38198,7 @@ 1 2 - 10695 + 10002 @@ -37846,7 +38214,7 @@ 1 2 - 10695 + 10002 @@ -37856,19 +38224,19 @@ cil_array_type - 133553 + 124898 id - 133553 + 124898 element_type - 133119 + 124492 rank - 65 + 60 @@ -37882,7 +38250,7 @@ 1 2 - 133553 + 124898 @@ -37898,7 +38266,7 @@ 1 2 - 133553 + 124898 @@ -37914,12 +38282,12 @@ 1 2 - 132729 + 124127 2 4 - 390 + 365 @@ -37935,12 +38303,12 @@ 1 2 - 132729 + 124127 2 4 - 390 + 365 @@ -37956,17 +38324,17 @@ 3 4 - 21 + 20 19 20 - 21 + 20 6134 6135 - 21 + 20 @@ -37982,17 +38350,17 @@ 3 4 - 21 + 20 19 20 - 21 + 20 6134 6135 - 21 + 20 @@ -38002,15 +38370,15 @@ cil_function_pointer_return_type - 28178 + 28172 id - 28178 + 28172 return_type - 5890 + 5889 @@ -38024,7 +38392,7 @@ 1 2 - 28178 + 28172 @@ -38045,7 +38413,7 @@ 2 3 - 1934 + 1933 3 @@ -38075,23 +38443,23 @@ cil_method - 28926164 + 27051569 id - 28926164 + 27051569 name - 5796080 + 5420458 parent - 5584859 + 5222925 return_type - 2472799 + 2312546 @@ -38105,7 +38473,7 @@ 1 2 - 28926164 + 27051569 @@ -38121,7 +38489,7 @@ 1 2 - 28926164 + 27051569 @@ -38137,7 +38505,7 @@ 1 2 - 28926164 + 27051569 @@ -38153,27 +38521,27 @@ 1 2 - 3864979 + 3614504 2 3 - 884650 + 827319 3 5 - 510718 + 477620 5 19 - 435545 + 407319 19 206309 - 100186 + 93694 @@ -38189,27 +38557,27 @@ 1 2 - 4034871 + 3773386 2 3 - 825141 + 771667 3 5 - 474032 + 443312 5 48 - 434873 + 406690 48 185857 - 27161 + 25401 @@ -38225,17 +38593,17 @@ 1 2 - 5227653 + 4888869 2 5 - 453075 + 423712 5 10798 - 115351 + 107875 @@ -38251,42 +38619,42 @@ 1 2 - 1766155 + 1651697 2 3 - 1281080 + 1198058 3 4 - 640778 + 599252 4 5 - 458715 + 428988 5 7 - 476613 + 445726 7 11 - 481234 + 450047 11 39 - 420879 + 393604 39 28806 - 59400 + 55550 @@ -38302,37 +38670,37 @@ 1 2 - 1806052 + 1689008 2 3 - 1302167 + 1217779 3 4 - 656702 + 614144 4 5 - 465441 + 435277 5 7 - 512866 + 479629 7 11 - 440383 + 411843 11 3640 - 401246 + 375242 @@ -38348,32 +38716,32 @@ 1 2 - 2382483 + 2228084 2 3 - 1477462 + 1381713 3 4 - 630603 + 589736 4 5 - 335684 + 313929 5 7 - 451122 + 421886 7 12757 - 307502 + 287574 @@ -38389,27 +38757,27 @@ 1 2 - 1493646 + 1396848 2 3 - 430599 + 402693 3 4 - 163514 + 152917 4 8 - 209789 + 196193 8 508819 - 175250 + 163893 @@ -38425,22 +38793,22 @@ 1 2 - 1692436 + 1582755 2 3 - 398620 + 372787 3 5 - 201132 + 188098 5 78481 - 180609 + 168904 @@ -38456,27 +38824,27 @@ 1 2 - 1616677 + 1511907 2 3 - 413308 + 386523 3 4 - 154185 + 144193 4 9 - 192346 + 179881 9 207300 - 96281 + 90042 @@ -38486,15 +38854,15 @@ cil_method_source_declaration - 25660895 + 23997910 method - 25660895 + 23997910 source - 22347768 + 20899494 @@ -38508,7 +38876,7 @@ 1 2 - 25660895 + 23997910 @@ -38524,12 +38892,12 @@ 1 2 - 21046706 + 19682749 2 981 - 1301061 + 1216744 @@ -38539,19 +38907,19 @@ cil_method_implementation - 19889330 + 18600378 id - 19889330 + 18600378 method - 19872408 + 18584553 location - 8135 + 7608 @@ -38565,7 +38933,7 @@ 1 2 - 19889330 + 18600378 @@ -38581,7 +38949,7 @@ 1 2 - 19889330 + 18600378 @@ -38597,12 +38965,12 @@ 1 2 - 19870282 + 18582564 2 27 - 2126 + 1988 @@ -38618,7 +38986,7 @@ 1 2 - 19872408 + 18584553 @@ -38634,67 +39002,67 @@ 2 18 - 629 + 588 22 47 - 629 + 588 48 113 - 629 + 588 116 188 - 650 + 608 199 281 - 629 + 588 288 423 - 629 + 588 429 577 - 629 + 588 591 869 - 629 + 588 876 1386 - 629 + 588 1410 2148 - 629 + 588 2282 3593 - 650 + 608 3704 9594 - 629 + 588 9763 45316 - 542 + 507 @@ -38710,67 +39078,67 @@ 2 18 - 629 + 588 22 47 - 629 + 588 48 113 - 629 + 588 116 188 - 650 + 608 199 281 - 629 + 588 288 423 - 629 + 588 429 577 - 629 + 588 591 869 - 629 + 588 876 1386 - 629 + 588 1410 2148 - 629 + 588 2282 3593 - 650 + 608 3704 9594 - 629 + 588 9763 45316 - 542 + 507 @@ -38780,15 +39148,15 @@ cil_implements - 1031394 + 964553 id - 1030960 + 964147 decl - 190675 + 178318 @@ -38802,12 +39170,12 @@ 1 2 - 1030526 + 963742 2 3 - 433 + 405 @@ -38823,27 +39191,27 @@ 1 2 - 124788 + 116701 2 3 - 31370 + 29337 3 4 - 12517 + 11706 4 10 - 14557 + 13613 10 3161 - 7441 + 6959 @@ -38853,23 +39221,23 @@ cil_field - 11684971 + 10927712 id - 11684971 + 10927712 parent - 2707928 + 2532437 name - 4586875 + 4289617 field_type - 2250188 + 2104362 @@ -38883,7 +39251,7 @@ 1 2 - 11684971 + 10927712 @@ -38899,7 +39267,7 @@ 1 2 - 11684971 + 10927712 @@ -38915,7 +39283,7 @@ 1 2 - 11684971 + 10927712 @@ -38931,42 +39299,42 @@ 1 2 - 796244 + 744642 2 3 - 670999 + 627514 3 4 - 357444 + 334279 4 5 - 241094 + 225470 5 6 - 162342 + 151821 6 8 - 192888 + 180388 8 15 - 209962 + 196355 15 6824 - 76951 + 71964 @@ -38982,42 +39350,42 @@ 1 2 - 796244 + 744642 2 3 - 670999 + 627514 3 4 - 357444 + 334279 4 5 - 241094 + 225470 5 6 - 162342 + 151821 6 8 - 192888 + 180388 8 15 - 209962 + 196355 15 6824 - 76951 + 71964 @@ -39033,32 +39401,32 @@ 1 2 - 917301 + 857854 2 3 - 895519 + 837484 3 4 - 342301 + 320117 4 5 - 181976 + 170183 5 8 - 237970 + 222548 8 524 - 132859 + 124249 @@ -39074,22 +39442,22 @@ 1 2 - 3517991 + 3290004 2 3 - 582506 + 544756 3 8 - 365970 + 342253 8 13940 - 120406 + 112603 @@ -39105,22 +39473,22 @@ 1 2 - 3517991 + 3290004 2 3 - 582506 + 544756 3 8 - 365970 + 342253 8 13940 - 120406 + 112603 @@ -39136,17 +39504,17 @@ 1 2 - 4006624 + 3746970 2 3 - 359223 + 335943 3 12921 - 221027 + 206703 @@ -39162,27 +39530,27 @@ 1 2 - 1354821 + 1267020 2 3 - 434330 + 406183 3 4 - 126177 + 118000 4 7 - 179438 + 167809 7 58308 - 155421 + 145349 @@ -39198,22 +39566,22 @@ 1 2 - 1515666 + 1417442 2 3 - 436131 + 407867 3 6 - 184991 + 173003 6 22697 - 113398 + 106049 @@ -39229,22 +39597,22 @@ 1 2 - 1648569 + 1541731 2 3 - 261769 + 244805 3 5 - 174838 + 163508 5 33056 - 165010 + 154317 @@ -39254,23 +39622,23 @@ cil_parameter - 55186618 + 51610183 id - 55186618 + 51610183 parameterizable - 27728414 + 25931440 index - 1214 + 1136 param_type - 7131245 + 6669096 @@ -39284,7 +39652,7 @@ 1 2 - 55186618 + 51610183 @@ -39300,7 +39668,7 @@ 1 2 - 55186618 + 51610183 @@ -39316,7 +39684,7 @@ 1 2 - 55186618 + 51610183 @@ -39332,27 +39700,27 @@ 1 2 - 12120690 + 11335194 2 3 - 8866290 + 8291700 3 4 - 4255182 + 3979420 4 7 - 2154037 + 2014442 7 57 - 332213 + 310683 @@ -39368,27 +39736,27 @@ 1 2 - 12120690 + 11335194 2 3 - 8866290 + 8291700 3 4 - 4255182 + 3979420 4 7 - 2154037 + 2014442 7 57 - 332213 + 310683 @@ -39404,22 +39772,22 @@ 1 2 - 12478850 + 11670143 2 3 - 9036465 + 8450846 3 4 - 4177081 + 3906380 4 43 - 2036017 + 1904070 @@ -39435,52 +39803,52 @@ 1 2 - 303 + 284 4 9 - 86 + 81 9 15 - 108 + 101 18 30 - 108 + 101 37 69 - 108 + 101 75 136 - 108 + 101 180 589 - 108 + 101 867 5193 - 108 + 101 8798 114907 - 108 + 101 311325 1275068 - 65 + 60 @@ -39496,52 +39864,52 @@ 1 2 - 303 + 284 4 9 - 86 + 81 9 15 - 108 + 101 18 30 - 108 + 101 37 69 - 108 + 101 75 136 - 108 + 101 180 589 - 108 + 101 867 5193 - 108 + 101 8798 114907 - 108 + 101 311325 1275068 - 65 + 60 @@ -39557,52 +39925,52 @@ 1 2 - 303 + 284 4 8 - 65 + 60 8 12 - 108 + 101 13 18 - 108 + 101 22 35 - 108 + 101 46 78 - 108 + 101 88 231 - 108 + 101 304 936 - 108 + 101 1418 9559 - 108 + 101 19688 276348 - 86 + 81 @@ -39618,42 +39986,42 @@ 1 2 - 2005297 + 1875341 2 3 - 2103423 + 1967108 3 4 - 781426 + 730785 4 5 - 480432 + 449297 5 7 - 544236 + 508966 7 11 - 540136 + 505132 11 36 - 538856 + 503935 36 108909 - 137436 + 128530 @@ -39669,42 +40037,42 @@ 1 2 - 2033869 + 1902062 2 3 - 2102121 + 1965891 3 4 - 775330 + 725083 4 5 - 473923 + 443210 5 7 - 543585 + 508358 7 11 - 537706 + 502859 11 37 - 535320 + 500628 37 89965 - 129388 + 121002 @@ -39720,22 +40088,22 @@ 1 2 - 5015000 + 4689997 2 3 - 1530484 + 1431299 3 6 - 535645 + 500932 6 55 - 50115 + 46867 @@ -39745,37 +40113,37 @@ cil_parameter_in - 263266 + 246205 id - 263266 + 246205 cil_parameter_out - 502430 + 469870 id - 502430 + 469870 cil_setter - 789279 + 738129 prop - 789279 + 738129 method - 789279 + 738129 @@ -39789,7 +40157,7 @@ 1 2 - 789279 + 738129 @@ -39805,7 +40173,7 @@ 1 2 - 789279 + 738129 @@ -39815,19 +40183,19 @@ cil_custom_modifiers - 160151 + 149772 id - 145312 + 135894 modifier - 390 + 365 kind - 43 + 40 @@ -39841,12 +40209,12 @@ 1 2 - 130581 + 122118 2 3 - 14730 + 13776 @@ -39862,12 +40230,12 @@ 1 2 - 144248 + 134900 2 3 - 1063 + 994 @@ -39883,82 +40251,82 @@ 1 2 - 43 + 40 2 3 - 21 + 20 11 12 - 21 + 20 13 14 - 43 + 40 15 16 - 21 + 20 18 19 - 21 + 20 23 24 - 21 + 20 25 26 - 21 + 20 27 28 - 21 + 20 28 29 - 21 + 20 35 36 - 21 + 20 47 48 - 21 + 20 94 95 - 21 + 20 411 412 - 21 + 20 836 837 - 21 + 20 5777 5778 - 21 + 20 @@ -39974,12 +40342,12 @@ 1 2 - 368 + 344 2 3 - 21 + 20 @@ -39995,12 +40363,12 @@ 676 677 - 21 + 20 6071 6072 - 21 + 20 @@ -40016,12 +40384,12 @@ 9 10 - 21 + 20 10 11 - 21 + 20 @@ -40031,15 +40399,15 @@ cil_type_annotation - 1287046 + 1203637 id - 1287046 + 1203637 annotation - 21 + 20 @@ -40053,7 +40421,7 @@ 1 2 - 1287046 + 1203637 @@ -40069,7 +40437,7 @@ 59325 59326 - 21 + 20 @@ -40079,15 +40447,15 @@ cil_getter - 4403792 + 4118399 prop - 4403792 + 4118399 method - 4403792 + 4118399 @@ -40101,7 +40469,7 @@ 1 2 - 4403792 + 4118399 @@ -40117,7 +40485,7 @@ 1 2 - 4403792 + 4118399 @@ -40127,15 +40495,15 @@ cil_adder - 52067 + 48693 event - 52067 + 48693 method - 52067 + 48693 @@ -40149,7 +40517,7 @@ 1 2 - 52067 + 48693 @@ -40165,7 +40533,7 @@ 1 2 - 52067 + 48693 @@ -40175,15 +40543,15 @@ cil_remover - 52067 + 48693 event - 52067 + 48693 method - 52067 + 48693 @@ -40197,7 +40565,7 @@ 1 2 - 52067 + 48693 @@ -40213,7 +40581,7 @@ 1 2 - 52067 + 48693 @@ -40223,15 +40591,15 @@ cil_raiser - 21 + 20 event - 21 + 20 method - 21 + 20 @@ -40245,7 +40613,7 @@ 1 2 - 21 + 20 @@ -40261,7 +40629,7 @@ 1 2 - 21 + 20 @@ -40271,23 +40639,23 @@ cil_property - 4409953 + 4124161 id - 4409953 + 4124161 parent - 1169156 + 1093388 name - 1132080 + 1058714 property_type - 519157 + 485512 @@ -40301,7 +40669,7 @@ 1 2 - 4409953 + 4124161 @@ -40317,7 +40685,7 @@ 1 2 - 4409953 + 4124161 @@ -40333,7 +40701,7 @@ 1 2 - 4409953 + 4124161 @@ -40349,37 +40717,37 @@ 1 2 - 383217 + 358382 2 3 - 288281 + 269598 3 4 - 158307 + 148047 4 5 - 100837 + 94302 5 7 - 102486 + 95844 7 13 - 91422 + 85497 13 2090 - 44604 + 41713 @@ -40395,37 +40763,37 @@ 1 2 - 459041 + 429292 2 3 - 214084 + 200210 3 4 - 158350 + 148088 4 5 - 100295 + 93795 5 7 - 102659 + 96006 7 13 - 91161 + 85253 13 2090 - 43563 + 40740 @@ -40441,32 +40809,32 @@ 1 2 - 452272 + 422962 2 3 - 353994 + 331053 3 4 - 148501 + 138877 4 5 - 74239 + 69428 5 8 - 92029 + 86065 8 54 - 48119 + 45000 @@ -40482,27 +40850,27 @@ 1 2 - 719379 + 672758 2 3 - 187161 + 175032 3 4 - 69879 + 65350 4 8 - 88341 + 82616 8 7161 - 67319 + 62956 @@ -40518,27 +40886,27 @@ 1 2 - 719379 + 672758 2 3 - 187486 + 175336 3 4 - 69922 + 65391 4 8 - 88319 + 82596 8 3695 - 66971 + 62631 @@ -40554,17 +40922,17 @@ 1 2 - 989479 + 925355 2 3 - 83134 + 77746 3 1330 - 59465 + 55611 @@ -40580,32 +40948,32 @@ 1 2 - 301363 + 281832 2 3 - 92007 + 86045 3 4 - 33822 + 31630 4 7 - 44018 + 41166 7 34 - 39007 + 36479 34 39145 - 8938 + 8359 @@ -40621,32 +40989,32 @@ 1 2 - 316028 + 295548 2 3 - 87300 + 81642 3 4 - 32607 + 30494 4 7 - 40721 + 38082 7 64 - 38942 + 36418 64 17546 - 3557 + 3327 @@ -40662,22 +41030,22 @@ 1 2 - 411269 + 384616 2 3 - 59899 + 56017 3 10 - 39159 + 36621 10 12159 - 8829 + 8257 @@ -40687,23 +41055,23 @@ cil_event - 51937 + 48571 id - 51937 + 48571 parent - 22085 + 20654 name - 24667 + 23068 event_type - 15707 + 14689 @@ -40717,7 +41085,7 @@ 1 2 - 51937 + 48571 @@ -40733,7 +41101,7 @@ 1 2 - 51937 + 48571 @@ -40749,7 +41117,7 @@ 1 2 - 51937 + 48571 @@ -40765,32 +41133,32 @@ 1 2 - 12105 + 11321 2 3 - 4317 + 4037 3 4 - 1930 + 1805 4 5 - 1366 + 1278 5 8 - 1692 + 1582 8 75 - 672 + 628 @@ -40806,32 +41174,32 @@ 1 2 - 12105 + 11321 2 3 - 4317 + 4037 3 4 - 1930 + 1805 4 5 - 1366 + 1278 5 8 - 1692 + 1582 8 75 - 672 + 628 @@ -40847,27 +41215,27 @@ 1 2 - 14557 + 13613 2 3 - 3883 + 3631 3 4 - 1627 + 1521 4 7 - 1692 + 1582 7 52 - 325 + 304 @@ -40883,27 +41251,27 @@ 1 2 - 14622 + 13674 2 3 - 4816 + 4504 3 4 - 2842 + 2657 4 8 - 1930 + 1805 8 141 - 455 + 426 @@ -40919,27 +41287,27 @@ 1 2 - 14622 + 13674 2 3 - 4816 + 4504 3 4 - 2842 + 2657 4 8 - 1930 + 1805 8 141 - 455 + 426 @@ -40955,17 +41323,17 @@ 1 2 - 22128 + 20694 2 4 - 2017 + 1886 4 10 - 520 + 486 @@ -40981,27 +41349,27 @@ 1 2 - 7896 + 7385 2 3 - 3189 + 2982 3 4 - 2581 + 2414 4 7 - 1345 + 1257 7 380 - 694 + 649 @@ -41017,22 +41385,22 @@ 1 2 - 9176 + 8582 2 3 - 2690 + 2515 3 4 - 2690 + 2515 4 203 - 1149 + 1075 @@ -41048,17 +41416,17 @@ 1 2 - 12604 + 11787 2 3 - 1909 + 1785 3 176 - 1193 + 1115 @@ -41068,23 +41436,23 @@ cil_local_variable - 16916551 + 15820254 id - 16916551 + 15820254 impl - 4885265 + 4568670 index - 8677 + 8115 var_type - 2173085 + 2032255 @@ -41098,7 +41466,7 @@ 1 2 - 16916551 + 15820254 @@ -41114,7 +41482,7 @@ 1 2 - 16916551 + 15820254 @@ -41130,7 +41498,7 @@ 1 2 - 16916551 + 15820254 @@ -41146,42 +41514,42 @@ 1 2 - 1994580 + 1865319 2 3 - 848506 + 793518 3 4 - 575585 + 538284 4 5 - 385690 + 360695 5 6 - 282987 + 264648 6 9 - 410509 + 383906 9 29 - 366447 + 342699 29 401 - 20957 + 19599 @@ -41197,42 +41565,42 @@ 1 2 - 1994580 + 1865319 2 3 - 848506 + 793518 3 4 - 575585 + 538284 4 5 - 385690 + 360695 5 6 - 282987 + 264648 6 9 - 410509 + 383906 9 29 - 366447 + 342699 29 401 - 20957 + 19599 @@ -41248,37 +41616,37 @@ 1 2 - 2184193 + 2042643 2 3 - 934201 + 873659 3 4 - 601576 + 562590 4 5 - 367423 + 343612 5 7 - 394759 + 369176 7 16 - 366469 + 342719 16 163 - 36642 + 34267 @@ -41294,42 +41662,42 @@ 1 2 - 3449 + 3225 2 9 - 585 + 547 9 10 - 1410 + 1318 11 21 - 781 + 730 22 33 - 737 + 689 35 224 - 672 + 628 237 3625 - 672 + 628 4237 225182 - 368 + 344 @@ -41345,42 +41713,42 @@ 1 2 - 3449 + 3225 2 9 - 585 + 547 9 10 - 1410 + 1318 11 21 - 781 + 730 22 33 - 737 + 689 35 224 - 672 + 628 237 3625 - 672 + 628 4237 225182 - 368 + 344 @@ -41396,47 +41764,47 @@ 1 2 - 3449 + 3225 2 6 - 715 + 669 6 8 - 802 + 750 8 13 - 694 + 649 13 18 - 737 + 689 18 27 - 672 + 628 28 164 - 672 + 628 168 3240 - 672 + 628 3729 56679 - 260 + 243 @@ -41452,32 +41820,32 @@ 1 2 - 1379206 + 1289824 2 3 - 276197 + 258297 3 4 - 128867 + 120515 4 7 - 171063 + 159977 7 29 - 164316 + 153667 29 72347 - 53434 + 49971 @@ -41493,27 +41861,27 @@ 1 2 - 1439669 + 1346370 2 3 - 263505 + 246428 3 5 - 196707 + 183959 5 12 - 163145 + 152572 12 44190 - 110057 + 102925 @@ -41529,27 +41897,27 @@ 1 2 - 1482929 + 1386826 2 3 - 287326 + 268705 3 4 - 136113 + 127292 4 8 - 175901 + 164502 8 217 - 90814 + 84929 @@ -41559,11 +41927,11 @@ cil_function_pointer_calling_conventions - 28676 + 28670 id - 28676 + 28670 kind @@ -41581,7 +41949,7 @@ 1 2 - 28676 + 28670 @@ -41612,35 +41980,35 @@ cil_handler - 1747389 + 1634147 id - 1747389 + 1634147 impl - 1140476 + 1066566 index - 1778 + 1663 kind - 86 + 81 try_start - 1706711 + 1596105 try_end - 1726063 + 1614203 handler_start - 1747389 + 1634147 @@ -41654,7 +42022,7 @@ 1 2 - 1747389 + 1634147 @@ -41670,7 +42038,7 @@ 1 2 - 1747389 + 1634147 @@ -41686,7 +42054,7 @@ 1 2 - 1747389 + 1634147 @@ -41702,7 +42070,7 @@ 1 2 - 1747389 + 1634147 @@ -41718,7 +42086,7 @@ 1 2 - 1747389 + 1634147 @@ -41734,7 +42102,7 @@ 1 2 - 1747389 + 1634147 @@ -41750,22 +42118,22 @@ 1 2 - 839568 + 785159 2 3 - 181759 + 169980 3 5 - 87907 + 82210 5 83 - 31240 + 29215 @@ -41781,22 +42149,22 @@ 1 2 - 839568 + 785159 2 3 - 181759 + 169980 3 5 - 87907 + 82210 5 83 - 31240 + 29215 @@ -41812,12 +42180,12 @@ 1 2 - 1067863 + 998659 2 4 - 72612 + 67906 @@ -41833,22 +42201,22 @@ 1 2 - 853171 + 797880 2 3 - 176769 + 165313 3 6 - 92506 + 86511 6 74 - 18028 + 16860 @@ -41864,22 +42232,22 @@ 1 2 - 847183 + 792280 2 3 - 179307 + 167687 3 6 - 94763 + 88621 6 83 - 19221 + 17975 @@ -41895,22 +42263,22 @@ 1 2 - 839568 + 785159 2 3 - 181759 + 169980 3 5 - 87907 + 82210 5 83 - 31240 + 29215 @@ -41926,52 +42294,52 @@ 3 5 - 130 + 121 6 7 - 86 + 81 7 8 - 130 + 121 9 10 - 564 + 527 10 18 - 151 + 142 19 34 - 151 + 142 36 71 - 151 + 142 86 166 - 151 + 142 178 946 - 151 + 142 1440 52570 - 108 + 101 @@ -41987,52 +42355,52 @@ 3 5 - 130 + 121 6 7 - 86 + 81 7 8 - 130 + 121 9 10 - 564 + 527 10 18 - 151 + 142 19 34 - 151 + 142 36 71 - 151 + 142 86 166 - 151 + 142 178 946 - 151 + 142 1440 52570 - 108 + 101 @@ -42048,22 +42416,22 @@ 1 2 - 781 + 730 2 3 - 368 + 344 3 4 - 433 + 405 4 5 - 195 + 182 @@ -42079,52 +42447,52 @@ 3 5 - 130 + 121 6 7 - 86 + 81 7 8 - 130 + 121 9 10 - 564 + 527 10 18 - 151 + 142 19 34 - 151 + 142 36 71 - 151 + 142 86 166 - 151 + 142 178 946 - 151 + 142 1440 52570 - 108 + 101 @@ -42140,52 +42508,52 @@ 3 5 - 130 + 121 6 7 - 86 + 81 7 8 - 130 + 121 9 10 - 564 + 527 10 18 - 151 + 142 19 34 - 151 + 142 36 71 - 151 + 142 86 166 - 151 + 142 178 946 - 151 + 142 1440 52570 - 108 + 101 @@ -42201,52 +42569,52 @@ 3 5 - 130 + 121 6 7 - 86 + 81 7 8 - 130 + 121 9 10 - 564 + 527 10 18 - 151 + 142 19 34 - 151 + 142 36 71 - 151 + 142 86 166 - 151 + 142 178 946 - 151 + 142 1440 52570 - 108 + 101 @@ -42262,22 +42630,22 @@ 332 333 - 21 + 20 10343 10344 - 21 + 20 13573 13574 - 21 + 20 56296 56297 - 21 + 20 @@ -42293,22 +42661,22 @@ 308 309 - 21 + 20 3817 3818 - 21 + 20 11336 11337 - 21 + 20 40556 40557 - 21 + 20 @@ -42324,22 +42692,22 @@ 9 10 - 21 + 20 29 30 - 21 + 20 46 47 - 21 + 20 82 83 - 21 + 20 @@ -42355,22 +42723,22 @@ 316 317 - 21 + 20 10038 10039 - 21 + 20 12652 12653 - 21 + 20 56253 56254 - 21 + 20 @@ -42386,22 +42754,22 @@ 316 317 - 21 + 20 10343 10344 - 21 + 20 12672 12673 - 21 + 20 56296 56297 - 21 + 20 @@ -42417,22 +42785,22 @@ 332 333 - 21 + 20 10343 10344 - 21 + 20 13573 13574 - 21 + 20 56296 56297 - 21 + 20 @@ -42448,12 +42816,12 @@ 1 2 - 1674733 + 1566200 2 9 - 31978 + 29905 @@ -42469,7 +42837,7 @@ 1 2 - 1706711 + 1596105 @@ -42485,12 +42853,12 @@ 1 2 - 1674733 + 1566200 2 9 - 31978 + 29905 @@ -42506,12 +42874,12 @@ 1 2 - 1694106 + 1584318 2 4 - 12604 + 11787 @@ -42527,12 +42895,12 @@ 1 2 - 1689507 + 1580016 2 9 - 17204 + 16089 @@ -42548,12 +42916,12 @@ 1 2 - 1674733 + 1566200 2 9 - 31978 + 29905 @@ -42569,12 +42937,12 @@ 1 2 - 1709423 + 1598642 2 8 - 16639 + 15561 @@ -42590,7 +42958,7 @@ 1 2 - 1726063 + 1614203 @@ -42606,12 +42974,12 @@ 1 2 - 1709423 + 1598642 2 8 - 16639 + 15561 @@ -42627,12 +42995,12 @@ 1 2 - 1724631 + 1612864 2 3 - 1431 + 1339 @@ -42648,7 +43016,7 @@ 1 2 - 1726063 + 1614203 @@ -42664,12 +43032,12 @@ 1 2 - 1709423 + 1598642 2 8 - 16639 + 15561 @@ -42685,7 +43053,7 @@ 1 2 - 1747389 + 1634147 @@ -42701,7 +43069,7 @@ 1 2 - 1747389 + 1634147 @@ -42717,7 +43085,7 @@ 1 2 - 1747389 + 1634147 @@ -42733,7 +43101,7 @@ 1 2 - 1747389 + 1634147 @@ -42749,7 +43117,7 @@ 1 2 - 1747389 + 1634147 @@ -42765,7 +43133,7 @@ 1 2 - 1747389 + 1634147 @@ -42775,15 +43143,15 @@ cil_handler_filter - 12190 + 11142 id - 12190 + 11142 filter_start - 12190 + 11142 @@ -42797,7 +43165,7 @@ 1 2 - 12190 + 11142 @@ -42813,7 +43181,7 @@ 1 2 - 12190 + 11142 @@ -42823,15 +43191,15 @@ cil_handler_type - 294464 + 275380 id - 294464 + 275380 catch_type - 7636 + 7141 @@ -42845,7 +43213,7 @@ 1 2 - 294464 + 275380 @@ -42861,42 +43229,42 @@ 1 2 - 2885 + 2698 2 3 - 1410 + 1318 3 4 - 911 + 852 4 6 - 542 + 507 6 11 - 607 + 568 11 21 - 607 + 568 21 246 - 585 + 547 788 6003 - 86 + 81 @@ -42906,15 +43274,15 @@ cil_method_stack_size - 19888809 + 18599891 method - 19888809 + 18599891 size - 2776 + 2596 @@ -42928,7 +43296,7 @@ 1 2 - 19888809 + 18599891 @@ -42944,52 +43312,52 @@ 1 2 - 650 + 608 2 3 - 498 + 466 3 6 - 216 + 202 6 11 - 238 + 223 11 18 - 238 + 223 21 40 - 216 + 202 43 109 - 216 + 202 130 842 - 216 + 202 958 40710 - 216 + 202 67239 634253 - 65 + 60 @@ -42999,169 +43367,169 @@ cil_public - 22449256 + 20994405 id - 22449256 + 20994405 cil_private - 11386254 + 10648354 id - 11386254 + 10648354 cil_protected - 21117106 + 19748587 id - 21117106 + 19748587 cil_internal - 725019 + 678034 id - 725019 + 678034 cil_static - 10668437 + 9977056 id - 10668437 + 9977056 cil_sealed - 4672352 + 4369555 id - 4672352 + 4369555 cil_virtual - 8620965 + 8062273 id - 8620965 + 8062273 cil_abstract - 2076282 + 1941726 id - 2076282 + 1941726 cil_class - 3287614 + 3074556 id - 3287614 + 3074556 cil_interface - 269970 + 252474 id - 269970 + 252474 cil_security - 35861 + 33537 id - 35861 + 33537 cil_requiresecobject - 607 + 568 id - 607 + 568 cil_specialname - 9198286 + 8602180 id - 9198286 + 8602180 cil_newslot - 5415097 + 5064165 id - 5415097 + 5064165 cil_base_class - 3276875 + 3064513 id - 3276875 + 3064513 base - 339589 + 317581 @@ -43175,7 +43543,7 @@ 1 2 - 3276875 + 3064513 @@ -43191,27 +43559,27 @@ 1 2 - 206144 + 192784 2 3 - 66169 + 61881 3 4 - 22519 + 21059 4 8 - 28094 + 26274 8 83448 - 16661 + 15581 @@ -43221,15 +43589,15 @@ cil_base_interface - 2149524 + 2010222 id - 914263 + 855013 base - 395713 + 370069 @@ -43243,32 +43611,32 @@ 1 2 - 516814 + 483321 2 3 - 146266 + 136787 3 4 - 70182 + 65634 4 5 - 34191 + 31975 5 6 - 90944 + 85050 6 32 - 55864 + 52243 @@ -43284,32 +43652,32 @@ 1 2 - 263483 + 246408 2 3 - 47012 + 43966 3 4 - 23387 + 21871 4 8 - 31739 + 29682 8 477 - 29678 + 27755 481 4267 - 412 + 385 @@ -43319,15 +43687,15 @@ cil_enum_underlying_type - 149759 + 140054 id - 149759 + 140054 underlying - 173 + 162 @@ -43341,7 +43709,7 @@ 1 2 - 149759 + 140054 @@ -43357,42 +43725,42 @@ 5 6 - 21 + 20 7 8 - 21 + 20 17 18 - 21 + 20 49 50 - 21 + 20 103 104 - 21 + 20 315 316 - 21 + 20 397 398 - 21 + 20 6010 6011 - 21 + 20 @@ -43402,19 +43770,19 @@ cil_type_parameter - 1302992 + 1218550 unbound - 978090 + 914703 index - 911 + 852 param - 1302992 + 1218550 @@ -43428,17 +43796,17 @@ 1 2 - 730573 + 683228 2 3 - 207511 + 194063 3 43 - 40005 + 37412 @@ -43454,17 +43822,17 @@ 1 2 - 730573 + 683228 2 3 - 207511 + 194063 3 43 - 40005 + 37412 @@ -43480,52 +43848,52 @@ 2 3 - 43 + 40 4 5 - 347 + 324 6 7 - 65 + 60 10 19 - 65 + 60 23 33 - 65 + 60 37 48 - 65 + 60 52 68 - 65 + 60 74 115 - 65 + 60 155 525 - 65 + 60 1844 45085 - 65 + 60 @@ -43541,52 +43909,52 @@ 2 3 - 43 + 40 4 5 - 347 + 324 6 7 - 65 + 60 10 19 - 65 + 60 23 33 - 65 + 60 37 48 - 65 + 60 52 68 - 65 + 60 74 115 - 65 + 60 155 525 - 65 + 60 1844 45085 - 65 + 60 @@ -43602,7 +43970,7 @@ 1 2 - 1302992 + 1218550 @@ -43618,7 +43986,7 @@ 1 2 - 1302992 + 1218550 @@ -43628,19 +43996,19 @@ cil_type_argument - 8232606 + 7699082 bound - 6158774 + 5759647 index - 911 + 852 t - 2057104 + 1923791 @@ -43654,17 +44022,17 @@ 1 2 - 4348535 + 4066723 2 3 - 1618413 + 1513530 3 43 - 191825 + 179394 @@ -43680,17 +44048,17 @@ 1 2 - 4430303 + 4143192 2 3 - 1586131 + 1483340 3 43 - 142339 + 133115 @@ -43706,47 +44074,47 @@ 1 2 - 43 + 40 2 3 - 347 + 324 3 4 - 65 + 60 6 8 - 65 + 60 8 9 - 151 + 142 15 33 - 65 + 60 155 277 - 65 + 60 669 8843 - 65 + 60 83441 283883 - 43 + 40 @@ -43762,52 +44130,52 @@ 1 2 - 65 + 60 2 3 - 390 + 365 5 6 - 43 + 40 6 7 - 43 + 40 7 8 - 43 + 40 8 9 - 86 + 81 14 29 - 65 + 60 135 185 - 65 + 60 351 3750 - 65 + 60 27498 82123 - 43 + 40 @@ -43823,32 +44191,32 @@ 1 2 - 889076 + 831458 2 3 - 538075 + 503204 3 4 - 217078 + 203010 4 6 - 174448 + 163142 6 12 - 158068 + 147824 12 14769 - 80357 + 75150 @@ -43864,17 +44232,17 @@ 1 2 - 1655945 + 1548629 2 3 - 368855 + 344951 3 10 - 32303 + 30210 @@ -43975,19 +44343,19 @@ cil_attribute - 4315754 + 4036066 attributeid - 4315754 + 4036066 element - 3808550 + 3561733 constructor - 20566 + 19233 @@ -44001,7 +44369,7 @@ 1 2 - 4315754 + 4036066 @@ -44017,7 +44385,7 @@ 1 2 - 4315754 + 4036066 @@ -44033,12 +44401,12 @@ 1 2 - 3532180 + 3303273 2 3520 - 276370 + 258460 @@ -44054,12 +44422,12 @@ 1 2 - 3535499 + 3306377 2 9 - 273051 + 255355 @@ -44075,62 +44443,62 @@ 1 2 - 2668 + 2495 2 3 - 2928 + 2738 3 4 - 1301 + 1217 4 5 - 1431 + 1339 5 8 - 1887 + 1765 8 13 - 1865 + 1744 13 22 - 1605 + 1501 22 46 - 1562 + 1460 46 91 - 1562 + 1460 92 174 - 1562 + 1460 174 920 - 1562 + 1460 935 72904 - 629 + 588 @@ -44146,62 +44514,62 @@ 1 2 - 2820 + 2637 2 3 - 2950 + 2759 3 4 - 1366 + 1278 4 5 - 1475 + 1379 5 7 - 1431 + 1339 7 11 - 1627 + 1521 11 19 - 1713 + 1602 19 39 - 1583 + 1481 39 74 - 1605 + 1501 74 143 - 1562 + 1460 144 521 - 1562 + 1460 523 72904 - 867 + 811 @@ -44211,19 +44579,19 @@ cil_attribute_named_argument - 221113 + 202107 attribute_id - 129011 + 117922 param - 2200 + 2011 value - 6264 + 5725 @@ -44237,12 +44605,12 @@ 1 2 - 36908 + 33736 2 3 - 92102 + 84185 @@ -44258,12 +44626,12 @@ 1 2 - 104461 + 95482 2 3 - 24549 + 22439 @@ -44279,42 +44647,42 @@ 1 2 - 507 + 464 5 6 - 338 + 309 8 9 - 338 + 309 10 11 - 169 + 154 13 14 - 169 + 154 53 54 - 338 + 309 559 560 - 169 + 154 589 590 - 169 + 154 @@ -44330,27 +44698,27 @@ 1 2 - 846 + 773 2 3 - 677 + 619 3 4 - 338 + 309 4 5 - 169 + 154 20 21 - 169 + 154 @@ -44366,37 +44734,37 @@ 1 2 - 2878 + 2630 2 3 - 1354 + 1238 3 4 - 338 + 309 4 5 - 507 + 464 5 15 - 507 + 464 15 117 - 507 + 464 642 643 - 169 + 154 @@ -44412,12 +44780,12 @@ 1 2 - 5756 + 5261 2 5 - 507 + 464 @@ -44427,19 +44795,19 @@ cil_attribute_positional_argument - 1300778 + 1207391 attribute_id - 1270980 + 1049908 index - 846 + 101 value - 103615 + 302628 @@ -44453,12 +44821,17 @@ 1 2 - 1243722 + 904843 2 + 3 + 133358 + + + 3 6 - 27258 + 11706 @@ -44474,12 +44847,17 @@ 1 2 - 1243891 + 905715 2 - 4 - 27088 + 3 + 133439 + + + 3 + 6 + 10753 @@ -44493,19 +44871,29 @@ 12 - 5 - 6 - 507 + 13 + 14 + 20 - 161 - 162 - 169 + 22 + 23 + 20 - 7507 - 7508 - 169 + 577 + 578 + 20 + + + 7150 + 7151 + 20 + + + 51748 + 51749 + 20 @@ -44519,24 +44907,24 @@ 12 - 2 - 3 - 338 + 11 + 12 + 40 - 3 - 4 - 169 + 188 + 189 + 20 - 55 - 56 - 169 + 3761 + 3762 + 20 - 559 - 560 - 169 + 12302 + 12303 + 20 @@ -44552,27 +44940,22 @@ 1 2 - 70600 + 223238 2 3 - 15745 + 51716 3 - 7 - 8973 + 11 + 23109 - 7 - 296 - 7788 - - - 1365 - 2071 - 507 + 11 + 10926 + 4564 @@ -44588,12 +44971,17 @@ 1 2 - 102768 + 275401 2 + 3 + 26984 + + + 3 6 - 846 + 243 @@ -44603,19 +44991,19 @@ metadata_handle - 80614512 + 75390191 entity - 80366908 + 75158634 location - 10717 + 10022 handle - 2025039 + 1893804 @@ -44629,12 +45017,12 @@ 1 2 - 80240796 + 75040695 2 495 - 126112 + 117939 @@ -44650,12 +45038,12 @@ 1 2 - 80243139 + 75042886 2 104 - 123769 + 115748 @@ -44671,62 +45059,62 @@ 2 3 - 2429 + 2272 10 139 - 824 + 770 139 352 - 824 + 770 356 715 - 824 + 770 736 1211 - 824 + 770 1213 1954 - 824 + 770 1962 3223 - 824 + 770 3237 5525 - 824 + 770 5587 9799 - 824 + 770 9811 23379 - 824 + 770 24980 128088 - 824 + 770 135385 182274 - 43 + 40 @@ -44742,62 +45130,62 @@ 1 2 - 2429 + 2272 5 70 - 824 + 770 70 179 - 846 + 791 179 371 - 824 + 770 372 608 - 824 + 770 612 989 - 824 + 770 995 1622 - 824 + 770 1623 2799 - 824 + 770 2799 4911 - 824 + 770 4937 12509 - 824 + 770 12740 68305 - 824 + 770 91205 91206 - 21 + 20 @@ -44813,72 +45201,72 @@ 1 2 - 390 + 365 2 3 - 274136 + 256370 3 4 - 1041 + 973 4 5 - 264980 + 247808 5 8 - 154315 + 144314 8 11 - 174383 + 163082 11 15 - 171193 + 160099 15 22 - 74890 + 70037 22 25 - 163904 + 153282 25 39 - 158762 + 148474 39 51 - 155118 + 145065 51 73 - 154510 + 144497 73 137 - 152666 + 142772 137 732 - 124745 + 116661 @@ -44894,62 +45282,62 @@ 1 2 - 274504 + 256715 2 3 - 266043 + 248802 3 4 - 150844 + 141068 4 6 - 177854 + 166328 6 8 - 171193 + 160099 8 11 - 74738 + 69895 11 13 - 163969 + 153343 13 20 - 158784 + 148494 20 26 - 154662 + 144639 26 37 - 155009 + 144964 37 70 - 154206 + 144213 70 495 - 123226 + 115240 @@ -44958,4 +45346,4 @@ - \ No newline at end of file + diff --git a/csharp/ql/lib/tutorial.qll b/csharp/ql/lib/tutorial.qll index 8cb1797a532..190d054d5ac 100644 --- a/csharp/ql/lib/tutorial.qll +++ b/csharp/ql/lib/tutorial.qll @@ -6,122 +6,22 @@ */ class Person extends string { Person() { - this = "Ronil" or - this = "Dina" or - this = "Ravi" or - this = "Bruce" or - this = "Jo" or - this = "Aida" or - this = "Esme" or - this = "Charlie" or - this = "Fred" or - this = "Meera" or - this = "Maya" or - this = "Chad" or - this = "Tiana" or - this = "Laura" or - this = "George" or - this = "Will" or - this = "Mary" or - this = "Almira" or - this = "Susannah" or - this = "Rhoda" or - this = "Cynthia" or - this = "Eunice" or - this = "Olive" or - this = "Virginia" or - this = "Angeline" or - this = "Helen" or - this = "Cornelia" or - this = "Harriet" or - this = "Mahala" or - this = "Abby" or - this = "Margaret" or - this = "Deb" or - this = "Minerva" or - this = "Severus" or - this = "Lavina" or - this = "Adeline" or - this = "Cath" or - this = "Elisa" or - this = "Lucretia" or - this = "Anne" or - this = "Eleanor" or - this = "Joanna" or - this = "Adam" or - this = "Agnes" or - this = "Rosanna" or - this = "Clara" or - this = "Melissa" or - this = "Amy" or - this = "Isabel" or - this = "Jemima" or - this = "Cordelia" or - this = "Melinda" or - this = "Delila" or - this = "Jeremiah" or - this = "Elijah" or - this = "Hester" or - this = "Walter" or - this = "Oliver" or - this = "Hugh" or - this = "Aaron" or - this = "Reuben" or - this = "Eli" or - this = "Amos" or - this = "Augustus" or - this = "Theodore" or - this = "Ira" or - this = "Timothy" or - this = "Cyrus" or - this = "Horace" or - this = "Simon" or - this = "Asa" or - this = "Frank" or - this = "Nelson" or - this = "Leonard" or - this = "Harrison" or - this = "Anthony" or - this = "Louis" or - this = "Milton" or - this = "Noah" or - this = "Cornelius" or - this = "Abdul" or - this = "Warren" or - this = "Harvey" or - this = "Dennis" or - this = "Wesley" or - this = "Sylvester" or - this = "Gilbert" or - this = "Sullivan" or - this = "Edmund" or - this = "Wilson" or - this = "Perry" or - this = "Matthew" or - this = "Simba" or - this = "Nala" or - this = "Rafiki" or - this = "Shenzi" or - this = "Ernest" or - this = "Gertrude" or - this = "Oscar" or - this = "Lilian" or - this = "Raymond" or - this = "Elgar" or - this = "Elmer" or - this = "Herbert" or - this = "Maude" or - this = "Mae" or - this = "Otto" or - this = "Edwin" or - this = "Ophelia" or - this = "Parsley" or - this = "Sage" or - this = "Rosemary" or - this = "Thyme" or - this = "Garfunkel" or - this = "King Basil" or - this = "Stephen" + this = + [ + "Ronil", "Dina", "Ravi", "Bruce", "Jo", "Aida", "Esme", "Charlie", "Fred", "Meera", "Maya", + "Chad", "Tiana", "Laura", "George", "Will", "Mary", "Almira", "Susannah", "Rhoda", + "Cynthia", "Eunice", "Olive", "Virginia", "Angeline", "Helen", "Cornelia", "Harriet", + "Mahala", "Abby", "Margaret", "Deb", "Minerva", "Severus", "Lavina", "Adeline", "Cath", + "Elisa", "Lucretia", "Anne", "Eleanor", "Joanna", "Adam", "Agnes", "Rosanna", "Clara", + "Melissa", "Amy", "Isabel", "Jemima", "Cordelia", "Melinda", "Delila", "Jeremiah", "Elijah", + "Hester", "Walter", "Oliver", "Hugh", "Aaron", "Reuben", "Eli", "Amos", "Augustus", + "Theodore", "Ira", "Timothy", "Cyrus", "Horace", "Simon", "Asa", "Frank", "Nelson", + "Leonard", "Harrison", "Anthony", "Louis", "Milton", "Noah", "Cornelius", "Abdul", "Warren", + "Harvey", "Dennis", "Wesley", "Sylvester", "Gilbert", "Sullivan", "Edmund", "Wilson", + "Perry", "Matthew", "Simba", "Nala", "Rafiki", "Shenzi", "Ernest", "Gertrude", "Oscar", + "Lilian", "Raymond", "Elgar", "Elmer", "Herbert", "Maude", "Mae", "Otto", "Edwin", + "Ophelia", "Parsley", "Sage", "Rosemary", "Thyme", "Garfunkel", "King Basil", "Stephen" + ] } /** Gets the hair color of the person. If the person is bald, there is no result. */ @@ -936,25 +836,12 @@ class Person extends string { /** Holds if the person is deceased. */ predicate isDeceased() { - this = "Ernest" or - this = "Gertrude" or - this = "Oscar" or - this = "Lilian" or - this = "Edwin" or - this = "Raymond" or - this = "Elgar" or - this = "Elmer" or - this = "Herbert" or - this = "Maude" or - this = "Mae" or - this = "Otto" or - this = "Ophelia" or - this = "Parsley" or - this = "Sage" or - this = "Rosemary" or - this = "Thyme" or - this = "Garfunkel" or - this = "King Basil" + this = + [ + "Ernest", "Gertrude", "Oscar", "Lilian", "Edwin", "Raymond", "Elgar", "Elmer", "Herbert", + "Maude", "Mae", "Otto", "Ophelia", "Parsley", "Sage", "Rosemary", "Thyme", "Garfunkel", + "King Basil" + ] } /** Gets a parent of the person (alive or deceased). */ @@ -1195,12 +1082,7 @@ class Person extends string { } /** Holds if the person is allowed in the region. Initially, all villagers are allowed in every region. */ - predicate isAllowedIn(string region) { - region = "north" or - region = "south" or - region = "east" or - region = "west" - } + predicate isAllowedIn(string region) { region = ["north", "south", "east", "west"] } } /** Returns a parent of the person. */ diff --git a/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/old.dbscheme b/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/old.dbscheme new file mode 100644 index 00000000000..4b9c288ece4 --- /dev/null +++ b/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/old.dbscheme @@ -0,0 +1,2058 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..a696c8bae06 --- /dev/null +++ b/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/semmlecode.csharp.dbscheme @@ -0,0 +1,2065 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/upgrade.properties b/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/upgrade.properties new file mode 100644 index 00000000000..52ee95569e5 --- /dev/null +++ b/csharp/ql/lib/upgrades/4b9c288ece4218779b6113b17af42795f4bbbee1/upgrade.properties @@ -0,0 +1,2 @@ +description: Add externalData relation +compatibility: backwards diff --git a/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/old.dbscheme b/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/old.dbscheme new file mode 100644 index 00000000000..58a680081d2 --- /dev/null +++ b/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/old.dbscheme @@ -0,0 +1,2046 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable_direct ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..ba220124807 --- /dev/null +++ b/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/semmlecode.csharp.dbscheme @@ -0,0 +1,2046 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/upgrade.properties b/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/upgrade.properties new file mode 100644 index 00000000000..e645b390610 --- /dev/null +++ b/csharp/ql/lib/upgrades/58a680081d22ec56c376539b7cca9521dc38fdbb/upgrade.properties @@ -0,0 +1,2 @@ +description: Support for compiler-generated event accessors. +compatibility: backwards diff --git a/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/old.dbscheme b/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/old.dbscheme new file mode 100644 index 00000000000..ab09ac82875 --- /dev/null +++ b/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/old.dbscheme @@ -0,0 +1,2054 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..4b9c288ece4 --- /dev/null +++ b/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/semmlecode.csharp.dbscheme @@ -0,0 +1,2058 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties b/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties new file mode 100644 index 00000000000..a647fd03682 --- /dev/null +++ b/csharp/ql/lib/upgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties @@ -0,0 +1,2 @@ +description: Add relation 'lambda_expr_return_type' for lambdas with explicit return types. +compatibility: backwards diff --git a/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/attribute_kind.ql b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/attribute_kind.ql new file mode 100644 index 00000000000..807b549df98 --- /dev/null +++ b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/attribute_kind.ql @@ -0,0 +1,15 @@ +class Attribute extends @attribute { + string toString() { none() } +} + +class Attributable extends @attributable { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +from Attribute id, TypeOrRef type_id, Attributable target +where attributes(id, type_id, target) +select id, 0, type_id, target diff --git a/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/old.dbscheme b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/old.dbscheme new file mode 100644 index 00000000000..ba220124807 --- /dev/null +++ b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/old.dbscheme @@ -0,0 +1,2046 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..ab09ac82875 --- /dev/null +++ b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/semmlecode.csharp.dbscheme @@ -0,0 +1,2054 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | --cil + * 3 | f1.cs + * 4 | f2.cs + * 5 | f3.cs + */ +#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 + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location_default ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +#keyset[entity, location] +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/upgrade.properties b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/upgrade.properties new file mode 100644 index 00000000000..453be5a92ce --- /dev/null +++ b/csharp/ql/lib/upgrades/ba2201248071b2bf0bb52909b35014091d2e18a6/upgrade.properties @@ -0,0 +1,3 @@ +description: Add 'kind' to 'attributes'. +compatability: backwards +attributes.rel: run attribute_kind.ql \ No newline at end of file diff --git a/csharp/ql/lib/upgrades/initial/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/initial/semmlecode.csharp.dbscheme index 34565707dfb..b1166f9a165 100644 --- a/csharp/ql/lib/upgrades/initial/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/upgrades/initial/semmlecode.csharp.dbscheme @@ -1,1707 +1,752 @@ -/* - * External artifacts - */ - -externalDefects( - unique int id: @externalDefect, - varchar(900) queryPath: string ref, - int location: @location ref, - varchar(900) message: string ref, - float severity: float ref); - -externalMetrics( - unique int id: @externalMetric, - varchar(900) queryPath: string ref, - int location: @location ref, - float value: float ref); - -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); - -/* - * 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); - -/* - * Version history - */ - -svnentries( - int id: @svnentry, - varchar(500) revision: string ref, - varchar(500) author: string ref, - date revisionDate: date ref, - int changeSize: int ref); - -svnaffectedfiles( - int id: @svnentry ref, - int file: @file ref, - varchar(500) action: string ref); - -svnentrymsg( - int id: @svnentry ref, - varchar(500) message: string ref -) - -svnchurn( - int commit: @svnentry ref, - int file: @file ref, - int addedLines: int ref, - int deletedLines: int ref); - -/* - * C# dbscheme - */ - -/** ELEMENTS **/ - -@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration - | @using_directive | @type_parameter_constraints | @external_element - | @xmllocatable | @asp_element | @namespace; - -@declaration = @callable | @generic | @assignable; - -@named_element = @namespace | @declaration; - -@declaration_with_accessors = @property | @indexer | @event; - -@assignable = @variable | @assignable_with_accessors | @event; - -@assignable_with_accessors = @property | @indexer; - -@external_element = @externalMetric | @externalDefect | @externalDataElement; - -@attributable = @assembly | @field | @parameter | @operator | @method | @constructor - | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors; - -/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ - -@location = @location_default | @assembly; - -locations_default( - unique int id: @location_default, - int file: @file ref, - int beginLine: int ref, - int beginColumn: int ref, - int endLine: int ref, - int endColumn: int ref); - -@sourceline = @file | @callable | @xmllocatable; - -numlines( - unique int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref); - -assemblies( - unique int id: @assembly, - int file: @file ref, - varchar(900) fullname: string ref, - varchar(900) name: string ref, - varchar(900) version: string ref); - -/* - fromSource(0) = unknown, - fromSource(1) = from source, - fromSource(2) = from library -*/ -files( - unique int id: @file, - varchar(900) name: string ref, - varchar(900) simple: string ref, - varchar(900) ext: string ref, - int fromSource: int ref); - -folders( - unique int id: @folder, - varchar(900) name: string ref, - varchar(900) simple: string ref); - -@container = @folder | @file ; - -containerparent( - int parent: @container ref, - unique int child: @container ref); - -file_extraction_mode( - unique int file: @file ref, - int mode: int ref - /* 0 = normal, 1 = standalone extractor */ - ); - -/** NAMESPACES **/ - -@type_container = @namespace | @type; - -namespaces( - unique int id: @namespace, - varchar(900) name: string ref); - -namespace_declarations( - unique int id: @namespace_declaration, - int namespace_id: @namespace ref); - -namespace_declaration_location( - unique int id: @namespace_declaration ref, - int loc: @location ref); - -parent_namespace( - unique int child_id: @type_container ref, - int namespace_id: @namespace ref); - -@declaration_or_directive = @namespace_declaration | @type | @using_directive; - -parent_namespace_declaration( - int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes - int namespace_id: @namespace_declaration ref); - -@using_directive = @using_namespace_directive | @using_static_directive; - -using_namespace_directives( - unique int id: @using_namespace_directive, - int namespace_id: @namespace ref); - -using_static_directives( - unique int id: @using_static_directive, - int type_id: @type_or_ref ref); - -using_directive_location( - unique int id: @using_directive ref, - int loc: @location ref); - -/** TYPES **/ - -types( - unique int id: @type, - int kind: int ref, - varchar(900) name: string ref); - -case @type.kind of - 1 = @bool_type -| 2 = @char_type -| 3 = @decimal_type -| 4 = @sbyte_type -| 5 = @short_type -| 6 = @int_type -| 7 = @long_type -| 8 = @byte_type -| 9 = @ushort_type -| 10 = @uint_type -| 11 = @ulong_type -| 12 = @float_type -| 13 = @double_type -| 14 = @enum_type -| 15 = @struct_type -| 17 = @class_type -| 19 = @interface_type -| 20 = @delegate_type -| 21 = @null_type -| 22 = @type_parameter -| 23 = @pointer_type -| 24 = @nullable_type -| 25 = @array_type -| 26 = @void_type -| 27 = @int_ptr_type -| 28 = @uint_ptr_type -| 29 = @dynamic_type -| 30 = @arglist_type -| 31 = @unknown_type -| 32 = @tuple_type - ; - -@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; -@integral_type = @signed_integral_type | @unsigned_integral_type; -@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; -@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; -@floating_point_type = @float_type | @double_type; -@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type - | @uint_ptr_type | @tuple_type; -@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type - | @dynamic_type; -@value_or_ref_type = @value_type | @ref_type; - -typerefs( - unique int id: @typeref, - varchar(900) name: string ref); - -typeref_type( - unique int id: @typeref ref, - unique int typeId: @type ref); - -@type_or_ref = @type | @typeref; - -array_element_type( - unique int array: @array_type ref, - int dimension: int ref, - int rank: int ref, - int element: @type_or_ref ref); - -nullable_underlying_type( - unique int nullable: @nullable_type ref, - int underlying: @type_or_ref ref); - -pointer_referent_type( - unique int pointer: @pointer_type ref, - int referent: @type_or_ref ref); - -enum_underlying_type( - unique int enum_id: @enum_type ref, - int underlying_type_id: @type_or_ref ref); - -delegate_return_type( - unique int delegate_id: @delegate_type ref, - int return_type_id: @type_or_ref ref); - -extend( - unique int sub: @type ref, - int super: @type_or_ref ref); - -@interface_or_ref = @interface_type | @typeref; - -implement( - int sub: @type ref, - int super: @type_or_ref ref); - -type_location( - int id: @type ref, - int loc: @location ref); - -tuple_underlying_type( - unique int tuple: @tuple_type ref, - int struct: @struct_type ref); - -#keyset[tuple, index] -tuple_element( - int tuple: @tuple_type ref, - int index: int ref, - unique int field: @field ref); - -attributes( - unique int id: @attribute, - int type_id: @type_or_ref ref, - int target: @attributable ref); - -attribute_location( - int id: @attribute ref, - int loc: @location ref); - -@type_mention_parent = @element | @type_mention; - -type_mention( - unique int id: @type_mention, - int type_id: @type_or_ref ref, - int parent: @type_mention_parent ref); - -type_mention_location( - unique int id: @type_mention ref, - int loc: @location ref); - -/** GENERICS **/ - -@generic = @type | @method | @local_function; - -is_generic(unique int id: @generic ref); - -is_constructed(unique int id: @generic ref); - -type_parameters( - unique int id: @type_parameter ref, - int index: int ref, - int generic_id: @generic ref, - int variance: int ref /* none = 0, out = 1, in = 2 */); - -#keyset[constructed_id, index] -type_arguments( - int id: @type_or_ref ref, - int index: int ref, - int constructed_id: @generic_or_ref ref); - -@generic_or_ref = @generic | @typeref; - -constructed_generic( - unique int constructed: @generic ref, - int generic: @generic_or_ref ref); - -type_parameter_constraints( - unique int id: @type_parameter_constraints, - int param_id: @type_parameter ref); - -type_parameter_constraints_location( - int id: @type_parameter_constraints ref, - int loc: @location ref); - -general_type_parameter_constraints( - int id: @type_parameter_constraints ref, - int kind: int ref /* class = 1, struct = 2, new = 3 */); - -specific_type_parameter_constraints( - int id: @type_parameter_constraints ref, - int base_id: @type_or_ref ref); - - -/** MODIFIERS */ - -@modifiable = @modifiable_direct | @event_accessor; - -@modifiable_direct = @member | @accessor; - -modifiers( - unique int id: @modifier, - varchar(900) name: string ref); - -has_modifiers( - int id: @modifiable_direct ref, - int mod_id: @modifier ref); - -compiler_generated(unique int id: @modifiable_direct ref); - -/** MEMBERS **/ - -@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; - -@named_exprorstmt = @goto_stmt | @labeled_stmt | @literal_expr; - -@virtualizable = @method | @property | @indexer | @event; - -exprorstmt_name( - unique int parent_id: @named_exprorstmt ref, - varchar(900) name: string ref); - -nested_types( - unique int id: @type ref, - int declaring_type_id: @type ref, - int unbound_id: @type ref); - -properties( - unique int id: @property, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int type_id: @type_or_ref ref, - int unbound_id: @property ref); - -property_location( - int id: @property ref, - int loc: @location ref); - -indexers( - unique int id: @indexer, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int type_id: @type_or_ref ref, - int unbound_id: @indexer ref); - -indexer_location( - int id: @indexer ref, - int loc: @location ref); - -accessors( - unique int id: @accessor, - int kind: int ref, - varchar(900) name: string ref, - int declaring_member_id: @member ref, - int unbound_id: @accessor ref); - -case @accessor.kind of - 1 = @getter -| 2 = @setter - ; - -accessor_location( - int id: @accessor ref, - int loc: @location ref); - -events( - unique int id: @event, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int type_id: @type_or_ref ref, - int unbound_id: @event ref); - -event_location( - int id: @event ref, - int loc: @location ref); - -event_accessors( - unique int id: @event_accessor, - int kind: int ref, - varchar(900) name: string ref, - int declaring_event_id: @event ref, - int unbound_id: @event_accessor ref); - -case @event_accessor.kind of - 1 = @add_event_accessor -| 2 = @remove_event_accessor - ; - -event_accessor_location( - int id: @event_accessor ref, - int loc: @location ref); - -operators( - unique int id: @operator, - varchar(900) name: string ref, - varchar(900) symbol: string ref, - int declaring_type_id: @type ref, - int type_id: @type_or_ref ref, - int unbound_id: @operator ref); - -operator_location( - int id: @operator ref, - int loc: @location ref); - -constant_value( - unique int id: @variable ref, - varchar(900) value: string ref); - -/** CALLABLES **/ - -@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; - -@callable_accessor = @accessor | @event_accessor; - -methods( - unique int id: @method, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int type_id: @type_or_ref ref, - int unbound_id: @method ref); - -method_location( - int id: @method ref, - int loc: @location ref); - -constructors( - unique int id: @constructor, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int unbound_id: @constructor ref); - -constructor_location( - int id: @constructor ref, - int loc: @location ref); - -destructors( - unique int id: @destructor, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int unbound_id: @destructor ref); - -destructor_location( - int id: @destructor ref, - int loc: @location ref); - -overrides( - unique int id: @callable ref, - int base_id: @callable ref); - -explicitly_implements( - unique int id: @member ref, - int interface_id: @interface_or_ref ref); - -local_functions( - unique int id: @local_function, - varchar(900) name: string ref, - int return_type: @type ref, - int unbound_id: @local_function ref); - -local_function_stmts( - unique int fn: @local_function_stmt ref, - int stmt: @local_function ref); - -@ref_callable = @local_function | @method | @delegate_type; - -ref_returns(int fn: @ref_callable ref); - -ref_readonly_returns(int fn: @ref_callable ref); - -/** VARIABLES **/ - -@variable = @local_scope_variable | @field; - -@local_scope_variable = @local_variable | @parameter; - -fields( - unique int id: @field, - int kind: int ref, - varchar(900) name: string ref, - int declaring_type_id: @type ref, - int type_id: @type_or_ref ref, - int unbound_id: @field ref); - -case @field.kind of - 1 = @addressable_field -| 2 = @constant - ; - -field_location( - int id: @field ref, - int loc: @location ref); - -localvars( - unique int id: @local_variable, - int kind: int ref, - varchar(900) name: string ref, - int implicitly_typed: int ref /* 0 = no, 1 = yes */, - int type_id: @type_or_ref ref, - int parent_id: @local_var_decl_expr ref); - -case @local_variable.kind of - 1 = @addressable_local_variable -| 2 = @local_constant -| 3 = @local_variable_ref - ; - -localvar_location( - unique int id: @local_variable ref, - int loc: @location ref); - -@parameterizable = @callable | @delegate_type | @indexer; - -#keyset[name, parent_id] -#keyset[index, parent_id] -params( - unique int id: @parameter, - varchar(900) name: string ref, - int type_id: @type_or_ref ref, - int index: int ref, - int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ - int parent_id: @parameterizable ref, - int unbound_id: @parameter ref); - -param_location( - int id: @parameter ref, - int loc: @location ref); - -/** STATEMENTS **/ - -@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; - -statements( - unique int id: @stmt, - int kind: int ref); - -#keyset[index, parent] -stmt_parent( - unique int stmt: @stmt ref, - int index: int ref, - int parent: @control_flow_element ref); - -@top_level_stmt_parent = @callable; - -// [index, parent] is not a keyset because the same parent may be compiled multiple times -stmt_parent_top_level( - unique int stmt: @stmt ref, - int index: int ref, - int parent: @top_level_stmt_parent ref); - -case @stmt.kind of - 1 = @block_stmt -| 2 = @expr_stmt -| 3 = @if_stmt -| 4 = @switch_stmt -| 5 = @while_stmt -| 6 = @do_stmt -| 7 = @for_stmt -| 8 = @foreach_stmt -| 9 = @break_stmt -| 10 = @continue_stmt -| 11 = @goto_stmt -| 12 = @goto_case_stmt -| 13 = @goto_default_stmt -| 14 = @throw_stmt -| 15 = @return_stmt -| 16 = @yield_stmt -| 17 = @try_stmt -| 18 = @checked_stmt -| 19 = @unchecked_stmt -| 20 = @lock_stmt -| 21 = @using_stmt -| 22 = @var_decl_stmt -| 23 = @const_decl_stmt -| 24 = @empty_stmt -| 25 = @unsafe_stmt -| 26 = @fixed_stmt -| 27 = @label_stmt -| 28 = @catch -| 29 = @case -| 30 = @local_function_stmt - ; - -@labeled_stmt = @label_stmt | @case; - -@decl_stmt = @var_decl_stmt | @const_decl_stmt; - -@cond_stmt = @if_stmt | @switch_stmt; - -@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; - -@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt - | @yield_stmt; - -@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; - - -stmt_location( - unique int id: @stmt ref, - int loc: @location ref); - -catch_type( - unique int catch_id: @catch ref, - int type_id: @type_or_ref ref, - int kind: int ref /* explicit = 1, implicit = 2 */); - -/** EXPRESSIONS **/ - -expressions( - unique int id: @expr, - int kind: int ref, - int type_id: @type_or_ref ref); - -#keyset[index, parent] -expr_parent( - unique int expr: @expr ref, - int index: int ref, - int parent: @control_flow_element ref); - -@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter; - -@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; - -// [index, parent] is not a keyset because the same parent may be compiled multiple times -expr_parent_top_level( - unique int expr: @expr ref, - int index: int ref, - int parent: @top_level_exprorstmt_parent ref); - -case @expr.kind of -/* literal */ - 1 = @bool_literal_expr -| 2 = @char_literal_expr -| 3 = @decimal_literal_expr -| 4 = @int_literal_expr -| 5 = @long_literal_expr -| 6 = @uint_literal_expr -| 7 = @ulong_literal_expr -| 8 = @float_literal_expr -| 9 = @double_literal_expr -| 10 = @string_literal_expr -| 11 = @null_literal_expr -/* primary & unary */ -| 12 = @this_access_expr -| 13 = @base_access_expr -| 14 = @local_variable_access_expr -| 15 = @parameter_access_expr -| 16 = @field_access_expr -| 17 = @property_access_expr -| 18 = @method_access_expr -| 19 = @event_access_expr -| 20 = @indexer_access_expr -| 21 = @array_access_expr -| 22 = @type_access_expr -| 23 = @typeof_expr -| 24 = @method_invocation_expr -| 25 = @delegate_invocation_expr -| 26 = @operator_invocation_expr -| 27 = @cast_expr -| 28 = @object_creation_expr -| 29 = @explicit_delegate_creation_expr -| 30 = @implicit_delegate_creation_expr -| 31 = @array_creation_expr -| 32 = @default_expr -| 33 = @plus_expr -| 34 = @minus_expr -| 35 = @bit_not_expr -| 36 = @log_not_expr -| 37 = @post_incr_expr -| 38 = @post_decr_expr -| 39 = @pre_incr_expr -| 40 = @pre_decr_expr -/* multiplicative */ -| 41 = @mul_expr -| 42 = @div_expr -| 43 = @rem_expr -/* additive */ -| 44 = @add_expr -| 45 = @sub_expr -/* shift */ -| 46 = @lshift_expr -| 47 = @rshift_expr -/* relational */ -| 48 = @lt_expr -| 49 = @gt_expr -| 50 = @le_expr -| 51 = @ge_expr -/* equality */ -| 52 = @eq_expr -| 53 = @ne_expr -/* logical */ -| 54 = @bit_and_expr -| 55 = @bit_xor_expr -| 56 = @bit_or_expr -| 57 = @log_and_expr -| 58 = @log_or_expr -/* type testing */ -| 59 = @is_expr -| 60 = @as_expr -/* null coalescing */ -| 61 = @null_coalescing_expr -/* conditional */ -| 62 = @conditional_expr -/* assignment */ -| 63 = @simple_assign_expr -| 64 = @assign_add_expr -| 65 = @assign_sub_expr -| 66 = @assign_mul_expr -| 67 = @assign_div_expr -| 68 = @assign_rem_expr -| 69 = @assign_and_expr -| 70 = @assign_xor_expr -| 71 = @assign_or_expr -| 72 = @assign_lshift_expr -| 73 = @assign_rshift_expr -/* more */ -| 74 = @object_init_expr -| 75 = @collection_init_expr -| 76 = @array_init_expr -| 77 = @checked_expr -| 78 = @unchecked_expr -| 79 = @constructor_init_expr -| 80 = @add_event_expr -| 81 = @remove_event_expr -| 82 = @par_expr -| 83 = @local_var_decl_expr -| 84 = @lambda_expr -| 85 = @anonymous_method_expr -| 86 = @namespace_expr -/* dynamic */ -| 92 = @dynamic_element_access_expr -| 93 = @dynamic_member_access_expr -/* unsafe */ -| 100 = @pointer_indirection_expr -| 101 = @address_of_expr -| 102 = @sizeof_expr -/* async */ -| 103 = @await_expr -/* C# 6.0 */ -| 104 = @nameof_expr -| 105 = @interpolated_string_expr -| 106 = @unknown_expr -/* C# 7.0 */ -| 107 = @throw_expr -| 108 = @tuple_expr -| 109 = @local_function_invocation_expr -| 110 = @ref_expr -| 111 = @discard_expr -; - -@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; -@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; -@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr - | @string_literal_expr | @null_literal_expr; - -@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; -@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr; -@assign_event_expr = @add_event_expr | @remove_event_expr; - -@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr - | @assign_rem_expr -@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr - | @assign_lshift_expr | @assign_rshift_expr; - -@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr - | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; -@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr; -@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; - -@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; -@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; -@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; - -@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr - | @event_access_expr | @dynamic_member_access_expr; - -@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; - -@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; - -@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; -@incr_op_expr = @pre_incr_expr | @post_incr_expr; -@decr_op_expr = @pre_decr_expr | @post_decr_expr; -@mut_op_expr = @incr_op_expr | @decr_op_expr; -@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; -@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; - -@ternary_log_op_expr = @conditional_expr; -@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; -@un_log_op_expr = @log_not_expr; -@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; - -@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr - | @rshift_expr; -@un_bit_op_expr = @bit_not_expr; -@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; - -@equality_op_expr = @eq_expr | @ne_expr; -@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; -@comp_expr = @equality_op_expr | @rel_op_expr; - -@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; - -@ternary_op = @ternary_log_op_expr; -@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; -@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr - | @pointer_indirection_expr | @address_of_expr; - -@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; - -@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr - | @delegate_invocation_expr | @object_creation_expr | @call_access_expr - | @local_function_invocation_expr; - -@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; - -@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr - | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; - -@throw_element = @throw_expr | @throw_stmt; - -implicitly_typed_array_creation( - unique int id: @array_creation_expr ref); - -explicitly_sized_array_creation( - unique int id: @array_creation_expr ref); - -mutator_invocation_mode( - unique int id: @operator_invocation_expr ref, - int mode: int ref /* prefix = 1, postfix = 2*/); - -expr_compiler_generated( - unique int id: @expr ref); - -expr_value( - unique int id: @expr ref, - varchar(900) value: string ref); - -expr_call( - unique int caller_id: @expr ref, - int target_id: @callable ref); - -expr_access( - unique int accesser_id: @access_expr ref, - int target_id: @accessible ref); - -@accessible = @method | @assignable | @local_function; - -expr_location( - unique int id: @expr ref, - int loc: @location ref); - -dynamic_member_name( - unique int id: @late_bindable_expr ref, - varchar(900) name: string ref); - -@qualifiable_expr = @member_access_expr - | @method_invocation_expr - | @element_access_expr; - -conditional_access( - unique int id: @qualifiable_expr ref); - -expr_argument( - unique int id: @expr ref, - int mode: int ref); - /* mode is the same as params: value = 0, ref = 1, out = 2 */ - -expr_argument_name( - unique int id: @expr ref, - varchar(900) name: string ref); - -/** CONTROL/DATA FLOW **/ - -@control_flow_element = @stmt | @expr; - -/* XML Files */ - -xmlEncoding ( - unique int id: @file ref, - varchar(900) encoding: string ref); - -xmlDTDs( - unique int id: @xmldtd, - varchar(900) root: string ref, - varchar(900) publicId: string ref, - varchar(900) systemId: string ref, - int fileid: @file ref); - -xmlElements( - unique int id: @xmlelement, - varchar(900) name: string ref, - int parentid: @xmlparent ref, - int idx: int ref, - int fileid: @file ref); - -xmlAttrs( - unique int id: @xmlattribute, - int elementid: @xmlelement ref, - varchar(900) name: string ref, - varchar(3600) value: string ref, - int idx: int ref, - int fileid: @file ref); - -xmlNs( - int id: @xmlnamespace, - varchar(900) prefixName: string ref, - varchar(900) 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, - varchar(3600) text: string ref, - int parentid: @xmlparent ref, - int fileid: @file ref); - -xmlChars( - unique int id: @xmlcharacters, - varchar(3600) text: string ref, - int parentid: @xmlparent ref, - int idx: int ref, - int isCDATA: int ref, - int fileid: @file ref); - -@xmlparent = @file | @xmlelement; -@xmlnamespaceable = @xmlelement | @xmlattribute; - -xmllocations( - int xmlElement: @xmllocatable ref, - int location: @location_default ref); - -@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; - -/* Comments */ - -commentline( - unique int id: @commentline, - int kind: int ref, - varchar(800) text: string ref, - varchar(800) rawtext: string ref); - -case @commentline.kind of - 0 = @singlelinecomment -| 1 = @xmldoccomment -| 2 = @multilinecomment; - -commentline_location( - unique int id: @commentline ref, - int loc: @location ref); - -commentblock( - unique int id : @commentblock); - -commentblock_location( - unique int id: @commentblock ref, - int loc: @location ref); - -commentblock_binding( - int id: @commentblock ref, - int entity: @element ref, - int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ - -commentblock_child( - int id: @commentblock ref, - int commentline: @commentline ref, - int index: int ref); - -/* ASP.NET */ - -case @asp_element.kind of - 0=@asp_close_tag -| 1=@asp_code -| 2=@asp_comment -| 3=@asp_data_binding -| 4=@asp_directive -| 5=@asp_open_tag -| 6=@asp_quoted_string -| 7=@asp_text -| 8=@asp_xml_directive; - -@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; - -asp_elements( - unique int id: @asp_element, - int kind: int ref, - int loc: @location ref); - -asp_comment_server(unique int comment: @asp_comment ref); -asp_code_inline(unique int code: @asp_code ref); -asp_directive_attribute( - int directive: @asp_directive ref, - int index: int ref, - varchar(1000) name: string ref, - int value: @asp_quoted_string ref); -asp_directive_name( - unique int directive: @asp_directive ref, - varchar(1000) name: string ref); -asp_element_body( - unique int element: @asp_element ref, - varchar(1000) body: string ref); -asp_tag_attribute( - int tag: @asp_open_tag ref, - int index: int ref, - varchar(1000) name: string ref, - int attribute: @asp_attribute ref); -asp_tag_name( - unique int tag: @asp_open_tag ref, - varchar(1000) name: string ref); -asp_tag_isempty(int tag: @asp_open_tag ref); - -/* Common Intermediate Language - CIL */ - -case @cil_instruction.opcode of - 0 = @cil_nop -| 1 = @cil_break -| 2 = @cil_ldarg_0 -| 3 = @cil_ldarg_1 -| 4 = @cil_ldarg_2 -| 5 = @cil_ldarg_3 -| 6 = @cil_ldloc_0 -| 7 = @cil_ldloc_1 -| 8 = @cil_ldloc_2 -| 9 = @cil_ldloc_3 -| 10 = @cil_stloc_0 -| 11 = @cil_stloc_1 -| 12 = @cil_stloc_2 -| 13 = @cil_stloc_3 -| 14 = @cil_ldarg_s -| 15 = @cil_ldarga_s -| 16 = @cil_starg_s -| 17 = @cil_ldloc_s -| 18 = @cil_ldloca_s -| 19 = @cil_stloc_s -| 20 = @cil_ldnull -| 21 = @cil_ldc_i4_m1 -| 22 = @cil_ldc_i4_0 -| 23 = @cil_ldc_i4_1 -| 24 = @cil_ldc_i4_2 -| 25 = @cil_ldc_i4_3 -| 26 = @cil_ldc_i4_4 -| 27 = @cil_ldc_i4_5 -| 28 = @cil_ldc_i4_6 -| 29 = @cil_ldc_i4_7 -| 30 = @cil_ldc_i4_8 -| 31 = @cil_ldc_i4_s -| 32 = @cil_ldc_i4 -| 33 = @cil_ldc_i8 -| 34 = @cil_ldc_r4 -| 35 = @cil_ldc_r8 -| 37 = @cil_dup -| 38 = @cil_pop -| 39 = @cil_jmp -| 40 = @cil_call -| 41 = @cil_calli -| 42 = @cil_ret -| 43 = @cil_br_s -| 44 = @cil_brfalse_s -| 45 = @cil_brtrue_s -| 46 = @cil_beq_s -| 47 = @cil_bge_s -| 48 = @cil_bgt_s -| 49 = @cil_ble_s -| 50 = @cil_blt_s -| 51 = @cil_bne_un_s -| 52 = @cil_bge_un_s -| 53 = @cil_bgt_un_s -| 54 = @cil_ble_un_s -| 55 = @cil_blt_un_s -| 56 = @cil_br -| 57 = @cil_brfalse -| 58 = @cil_brtrue -| 59 = @cil_beq -| 60 = @cil_bge -| 61 = @cil_bgt -| 62 = @cil_ble -| 63 = @cil_blt -| 64 = @cil_bne_un -| 65 = @cil_bge_un -| 66 = @cil_bgt_un -| 67 = @cil_ble_un -| 68 = @cil_blt_un -| 69 = @cil_switch -| 70 = @cil_ldind_i1 -| 71 = @cil_ldind_u1 -| 72 = @cil_ldind_i2 -| 73 = @cil_ldind_u2 -| 74 = @cil_ldind_i4 -| 75 = @cil_ldind_u4 -| 76 = @cil_ldind_i8 -| 77 = @cil_ldind_i -| 78 = @cil_ldind_r4 -| 79 = @cil_ldind_r8 -| 80 = @cil_ldind_ref -| 81 = @cil_stind_ref -| 82 = @cil_stind_i1 -| 83 = @cil_stind_i2 -| 84 = @cil_stind_i4 -| 85 = @cil_stind_i8 -| 86 = @cil_stind_r4 -| 87 = @cil_stind_r8 -| 88 = @cil_add -| 89 = @cil_sub -| 90 = @cil_mul -| 91 = @cil_div -| 92 = @cil_div_un -| 93 = @cil_rem -| 94 = @cil_rem_un -| 95 = @cil_and -| 96 = @cil_or -| 97 = @cil_xor -| 98 = @cil_shl -| 99 = @cil_shr -| 100 = @cil_shr_un -| 101 = @cil_neg -| 102 = @cil_not -| 103 = @cil_conv_i1 -| 104 = @cil_conv_i2 -| 105 = @cil_conv_i4 -| 106 = @cil_conv_i8 -| 107 = @cil_conv_r4 -| 108 = @cil_conv_r8 -| 109 = @cil_conv_u4 -| 110 = @cil_conv_u8 -| 111 = @cil_callvirt -| 112 = @cil_cpobj -| 113 = @cil_ldobj -| 114 = @cil_ldstr -| 115 = @cil_newobj -| 116 = @cil_castclass -| 117 = @cil_isinst -| 118 = @cil_conv_r_un -| 121 = @cil_unbox -| 122 = @cil_throw -| 123 = @cil_ldfld -| 124 = @cil_ldflda -| 125 = @cil_stfld -| 126 = @cil_ldsfld -| 127 = @cil_ldsflda -| 128 = @cil_stsfld -| 129 = @cil_stobj -| 130 = @cil_conv_ovf_i1_un -| 131 = @cil_conv_ovf_i2_un -| 132 = @cil_conv_ovf_i4_un -| 133 = @cil_conv_ovf_i8_un -| 134 = @cil_conv_ovf_u1_un -| 135 = @cil_conv_ovf_u2_un -| 136 = @cil_conv_ovf_u4_un -| 137 = @cil_conv_ovf_u8_un -| 138 = @cil_conv_ovf_i_un -| 139 = @cil_conv_ovf_u_un -| 140 = @cil_box -| 141 = @cil_newarr -| 142 = @cil_ldlen -| 143 = @cil_ldelema -| 144 = @cil_ldelem_i1 -| 145 = @cil_ldelem_u1 -| 146 = @cil_ldelem_i2 -| 147 = @cil_ldelem_u2 -| 148 = @cil_ldelem_i4 -| 149 = @cil_ldelem_u4 -| 150 = @cil_ldelem_i8 -| 151 = @cil_ldelem_i -| 152 = @cil_ldelem_r4 -| 153 = @cil_ldelem_r8 -| 154 = @cil_ldelem_ref -| 155 = @cil_stelem_i -| 156 = @cil_stelem_i1 -| 157 = @cil_stelem_i2 -| 158 = @cil_stelem_i4 -| 159 = @cil_stelem_i8 -| 160 = @cil_stelem_r4 -| 161 = @cil_stelem_r8 -| 162 = @cil_stelem_ref -| 163 = @cil_ldelem -| 164 = @cil_stelem -| 165 = @cil_unbox_any -| 179 = @cil_conv_ovf_i1 -| 180 = @cil_conv_ovf_u1 -| 181 = @cil_conv_ovf_i2 -| 182 = @cil_conv_ovf_u2 -| 183 = @cil_conv_ovf_i4 -| 184 = @cil_conv_ovf_u4 -| 185 = @cil_conv_ovf_i8 -| 186 = @cil_conv_ovf_u8 -| 194 = @cil_refanyval -| 195 = @cil_ckinfinite -| 198 = @cil_mkrefany -| 208 = @cil_ldtoken -| 209 = @cil_conv_u2 -| 210 = @cil_conv_u1 -| 211 = @cil_conv_i -| 212 = @cil_conv_ovf_i -| 213 = @cil_conv_ovf_u -| 214 = @cil_add_ovf -| 215 = @cil_add_ovf_un -| 216 = @cil_mul_ovf -| 217 = @cil_mul_ovf_un -| 218 = @cil_sub_ovf -| 219 = @cil_sub_ovf_un -| 220 = @cil_endfinally -| 221 = @cil_leave -| 222 = @cil_leave_s -| 223 = @cil_stind_i -| 224 = @cil_conv_u -| 65024 = @cil_arglist -| 65025 = @cil_ceq -| 65026 = @cil_cgt -| 65027 = @cil_cgt_un -| 65028 = @cil_clt -| 65029 = @cil_clt_un -| 65030 = @cil_ldftn -| 65031 = @cil_ldvirtftn -| 65033 = @cil_ldarg -| 65034 = @cil_ldarga -| 65035 = @cil_starg -| 65036 = @cil_ldloc -| 65037 = @cil_ldloca -| 65038 = @cil_stloc -| 65039 = @cil_localloc -| 65041 = @cil_endfilter -| 65042 = @cil_unaligned -| 65043 = @cil_volatile -| 65044 = @cil_tail -| 65045 = @cil_initobj -| 65046 = @cil_constrained -| 65047 = @cil_cpblk -| 65048 = @cil_initblk -| 65050 = @cil_rethrow -| 65052 = @cil_sizeof -| 65053 = @cil_refanytype -| 65054 = @cil_readonly -; - -// CIL ignored instructions - -@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; - -// CIL local/parameter/field access - -@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; -@cil_starg_any = @cil_starg | @cil_starg_s; - -@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; -@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; - -@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; -@cil_stfld_any = @cil_stfld | @cil_stsfld; - -@cil_local_access = @cil_stloc_any | @cil_ldloc_any; -@cil_arg_access = @cil_starg_any | @cil_ldarg_any; -@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; -@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; - -@cil_stack_access = @cil_local_access | @cil_arg_access; -@cil_field_access = @cil_ldfld_any | @cil_stfld_any; - -@cil_access = @cil_read_access | @cil_write_access; - -// CIL constant/literal instructions - -@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; - -@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | - @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; - -@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; - -@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; - -// Control flow - -@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; -@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | - @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | - @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | - @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; -@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; -@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; -@cil_leave_any = @cil_leave | @cil_leave_s; -@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; - -// CIL call instructions - -@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; - -// CIL expression instructions - -@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | - @cil_newarr | @cil_ldtoken | @cil_sizeof | - @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; - -@cil_unary_expr = - @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| - @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | - @cil_ldind | @cil_unbox; - -@cil_conversion_operation = - @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | - @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | - @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | - @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | - @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | - @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | - @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | - @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | - @cil_conv_i | @cil_conv_u | @cil_conv_r_un; - -@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | - @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; - -@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | - @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; - -@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; - -@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; - -@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | - @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | - @cil_sub_ovf | @cil_sub_ovf_un; - -@cil_unary_bitwise_operation = @cil_not; - -@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; - -@cil_unary_arithmetic_operation = @cil_neg; - -@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; - -// Elements that retrieve an address of something -@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; - -// CIL array instructions - -@cil_read_array = - @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | - @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | - @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; - -@cil_write_array = @cil_stelem | @cil_stelem_ref | - @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | - @cil_stelem_r4 | @cil_stelem_r8; - -@cil_throw_any = @cil_throw | @cil_rethrow; - -#keyset[impl, index] -cil_instruction( - unique int id: @cil_instruction, - int opcode: int ref, - int index: int ref, - int impl: @cil_method_implementation ref); - -cil_jump( - unique int instruction: @cil_jump ref, - int target: @cil_instruction ref); - -cil_access( - unique int instruction: @cil_instruction ref, - int target: @cil_accessible ref); - -cil_value( - unique int instruction: @cil_literal ref, - varchar(900) value: string ref); - -#keyset[instruction, index] -cil_switch( - int instruction: @cil_switch ref, - int index: int ref, - int target: @cil_instruction ref); - -cil_instruction_location( - unique int id: @cil_instruction ref, - int loc: @location ref); - -cil_type_location( - int id: @cil_type ref, - int loc: @location ref); - -cil_method_location( - int id: @cil_method ref, - int loc: @location ref); - -@cil_namespace = @namespace; - -@cil_type_container = @cil_type | @cil_namespace | @cil_method; - -case @cil_type.kind of - 0 = @cil_valueorreftype -| 1 = @cil_typeparameter -| 2 = @cil_array_type -| 3 = @cil_pointer_type -; - -cil_type( - unique int id: @cil_type, - varchar(900) name: string ref, - int kind: int ref, - int parent: @cil_type_container ref, - int sourceDecl: @cil_type ref); - -cil_pointer_type( - unique int id: @cil_pointer_type ref, - int pointee: @cil_type ref); - -cil_array_type( - unique int id: @cil_array_type ref, - int element_type: @cil_type ref, - int rank: int ref); - -cil_method( - unique int id: @cil_method, - varchar(900) name: string ref, - int parent: @cil_type ref, - int return_type: @cil_type ref); - -cil_method_source_declaration( - unique int method: @cil_method ref, - int source: @cil_method ref); - -cil_method_implementation( - unique int id: @cil_method_implementation, - int method: @cil_method ref, - int location: @assembly ref); - -cil_implements( - int id: @cil_method ref, - int decl: @cil_method ref); - -#keyset[parent, name] -cil_field( - unique int id: @cil_field, - int parent: @cil_type ref, - varchar(900) name: string ref, - int field_type: @cil_type ref); - -@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; -@cil_named_element = @cil_declaration | @cil_namespace; -@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; -@cil_accessible = @cil_declaration; -@cil_variable = @cil_field | @cil_stack_variable; -@cil_stack_variable = @cil_local_variable | @cil_parameter; -@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; - -#keyset[method, index] -cil_parameter( - unique int id: @cil_parameter, - int method: @cil_method ref, - int index: int ref, - int param_type: @cil_type ref); - -cil_parameter_in(unique int id: @cil_parameter ref); -cil_parameter_out(unique int id: @cil_parameter ref); - -cil_setter(unique int prop: @cil_property ref, - int method: @cil_method ref); - -cil_getter(unique int prop: @cil_property ref, - int method: @cil_method ref); - -cil_adder(unique int event: @cil_event ref, - int method: @cil_method ref); - -cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); - -cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); - -cil_property( - unique int id: @cil_property, - int parent: @cil_type ref, - varchar(900) name: string ref, - int property_type: @cil_type ref); - -#keyset[parent, name] -cil_event(unique int id: @cil_event, - int parent: @cil_type ref, - varchar(900) name: string ref, - int event_type: @cil_type ref); - -#keyset[impl, index] -cil_local_variable( - unique int id: @cil_local_variable, - int impl: @cil_method_implementation ref, - int index: int ref, - int var_type: @cil_type ref); - -// CIL handlers (exception handlers etc). - -case @cil_handler.kind of - 0 = @cil_catch_handler -| 1 = @cil_filter_handler -| 2 = @cil_finally_handler -| 4 = @cil_fault_handler -; - -#keyset[impl, index] -cil_handler( - unique int id: @cil_handler, - int impl: @cil_method_implementation ref, - int index: int ref, - int kind: int ref, - int try_start: @cil_instruction ref, - int try_end: @cil_instruction ref, - int handler_start: @cil_instruction ref); - -cil_handler_filter( - unique int id: @cil_handler ref, - int filter_start: @cil_instruction ref); - -cil_handler_type( - unique int id: @cil_handler ref, - int catch_type: @cil_type ref); - -@cil_controlflow_node = @cil_entry_point | @cil_instruction; - -@cil_entry_point = @cil_method_implementation | @cil_handler; - -@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; - -cil_method_stack_size( - unique int method: @cil_method_implementation ref, - int size: int ref); - -// CIL modifiers - -cil_public(int id: @cil_member ref); -cil_private(int id: @cil_member ref); -cil_protected(int id: @cil_member ref); -cil_internal(int id: @cil_member ref); -cil_static(int id: @cil_member ref); -cil_sealed(int id: @cil_member ref); -cil_virtual(int id: @cil_method ref); -cil_abstract(int id: @cil_member ref); -cil_class(int id: @cil_type ref); -cil_interface(int id: @cil_type ref); -cil_security(int id: @cil_member ref); -cil_requiresecobject(int id: @cil_method ref); -cil_specialname(int id: @cil_method ref); -cil_newslot(int id: @cil_method ref); - -cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); -cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); - -#keyset[unbound, index] -cil_type_parameter( - int unbound: @cil_member ref, - int index: int ref, - int param: @cil_typeparameter ref); - -#keyset[bound, index] -cil_type_argument( - int bound: @cil_member ref, - int index: int ref, - int t: @cil_type ref); - -// CIL type parameter constraints - -cil_typeparam_covariant(int tp: @cil_typeparameter ref); -cil_typeparam_contravariant(int tp: @cil_typeparameter ref); -cil_typeparam_class(int tp: @cil_typeparameter ref); -cil_typeparam_struct(int tp: @cil_typeparameter ref); -cil_typeparam_new(int tp: @cil_typeparameter ref); -cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); - -// CIL attributes - -cil_attribute( - unique int attributeid: @cil_attribute, - int element: @cil_declaration ref, - int constructor: @cil_method ref); - -#keyset[attribute_id, param] -cil_attribute_named_argument( - int attribute_id: @cil_attribute ref, - varchar(100) param: string ref, - varchar(900) value: string ref); - -#keyset[attribute_id, index] -cil_attribute_positional_argument( - int attribute_id: @cil_attribute ref, - int index: int ref, - varchar(900) value: string ref); - - -// Common .Net data model covering both C# and CIL - -// Common elements -@dotnet_element = @element | @cil_element; -@dotnet_named_element = @named_element | @cil_named_element; -@dotnet_callable = @callable | @cil_method; -@dotnet_variable = @variable | @cil_variable; -@dotnet_field = @field | @cil_field; -@dotnet_parameter = @parameter | @cil_parameter; -@dotnet_declaration = @declaration | @cil_declaration; -@dotnet_member = @member | @cil_member; -@dotnet_event = @event | @cil_event; -@dotnet_property = @property | @cil_property | @indexer; - -// Common types -@dotnet_type = @type | @cil_type; -@dotnet_call = @call | @cil_call_any; -@dotnet_throw = @throw_element | @cil_throw_any; -@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; -@dotnet_typeparameter = @type_parameter | @cil_typeparameter; -@dotnet_array_type = @array_type | @cil_array_type; -@dotnet_pointer_type = @pointer_type | @cil_pointer_type; -@dotnet_type_parameter = @type_parameter | @cil_typeparameter; -@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; - -// Attributes -@dotnet_attribute = @attribute | @cil_attribute; - -// Expressions -@dotnet_expr = @expr | @cil_expr; - -// Literals -@dotnet_literal = @literal_expr | @cil_literal; -@dotnet_string_literal = @string_literal_expr | @cil_ldstr; -@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; -@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; -@dotnet_null_literal = @null_literal_expr | @cil_ldnull; - -@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | - @callable | @value_or_ref_type | @void_type; - -#keyset[entity, location] -metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) +/* + * External artifacts + */ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +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); + +/* + * 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); + +/* + * Version history + */ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +) + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int churnedLines : int ref +) + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @container | @type | @expr | @stmt | @member | @variable | @namespace + | @modifier | @accessor | @event_accessor | @type_parameter_constraints + | @namespace_declaration | @using_directive | @attribute + | @xmllocatable | @externalMetric | @externalDefect; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines(int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies(unique int id: @assembly, + int file: @file ref, + varchar(900) fullname: string ref, + varchar(900) name: string ref, + varchar(900) version: string ref); +/* + fromSource(0) = unknown, + fromSource(1) = from source, + fromSource(2) = from library +*/ +files(unique int id: @file, + varchar(900) name: string ref, + varchar(900) simple: string ref, + varchar(900) ext: string ref, + int fromSource: int ref); + +folders(unique int id: @folder, + varchar(900) name: string ref, + varchar(900) simple: string ref); + +@container = @folder | @file ; + +containerparent(int parent: @container ref, + unique int child: @container ref); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces(unique int id: @namespace, + varchar(900) name: string ref); + +namespace_declarations(unique int id: @namespace_declaration, + int namespace_id: @namespace ref); +namespace_declaration_location(unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace(unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration(int child_id: @declaration_or_directive ref, + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive; + +using_namespace_directives(unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); +using_directive_location(unique int id: @using_directive ref, + int loc: @location ref); + +/** TYPES **/ + +types(unique int id: @type, + int kind: int ref, + varchar(900) name: string ref); +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type + ; + +array_element_type(unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type ref); +nullable_underlying_type(unique int nullable: @nullable_type ref, + int underlying: @type ref); +pointer_referent_type(unique int pointer: @pointer_type ref, + int referent: @type ref); +enum_underlying_type(unique int enum_id: @enum_type ref, + int underlying_type_id: @type ref); +delegate_return_type(unique int delegate_id: @delegate_type ref, + int return_type_id: @type ref); +extend(unique int sub: @type ref, + int super: @type ref); +implement(int sub: @type ref, + int super: @type ref); + +type_location(int id: @type ref, + int loc: @location ref); + +attributes(unique int id: @attribute, + int type_id: @type ref, + int target: @element ref); + +attribute_location(int id: @attribute ref, + int loc: @location ref); + +/** GENERICS **/ + +@generic = @type | @method; + +is_generic(unique int id: @generic ref); +is_constructed(unique int id: @generic ref); +type_parameters(unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref); +type_arguments(int id: @type ref, + int index: int ref, + int constructed_id: @generic ref); +constructed_generic(unique int constructed: @generic ref, + int generic: @generic ref); + +type_parameter_constraints(unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); +type_parameter_constraints_location(int id: @type_parameter_constraints ref, + int loc: @location ref); +general_type_parameter_constraints(int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); +specific_type_parameter_constraints(int id: @type_parameter_constraints ref, + int base_id: @type ref); + + +/** MODIFIERS */ + +@modifiable = @member | @accessor; + +modifiers(unique int id: @modifier, + varchar(900) name: string ref); + +has_modifiers(int id: @modifiable ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@exprorstmt_parent = @expr | @stmt | @memberoraccessor | @variable | @attribute; + +@memberoraccessor = @member | @accessor | @event_accessor; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @literal_expr; + +exprorstmt_name(unique int parent_id: @named_exprorstmt ref, + varchar(900) name: string ref); + +nested_types(unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties(unique int id: @property, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int type_id: @type ref, + int unbound_id: @property ref); + +property_location(int id: @property ref, + int loc: @location ref); + +indexers(unique int id: @indexer, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int type_id: @type ref, + int unbound_id: @indexer ref); + +indexer_location(int id: @indexer ref, + int loc: @location ref); + +accessors(unique int id: @accessor, + int kind: int ref, + varchar(900) name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +accessor_location(int id: @accessor ref, + int loc: @location ref); + +events(unique int id: @event, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int type_id: @type ref, + int unbound_id: @event ref); + +event_location(int id: @event ref, + int loc: @location ref); + +event_accessors(unique int id: @event_accessor, + int kind: int ref, + varchar(900) name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location(int id: @event_accessor ref, + int loc: @location ref); + +operators(unique int id: @operator, + varchar(900) name: string ref, + varchar(900) symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type ref, + int unbound_id: @operator ref); + +operator_location(int id: @operator ref, + int loc: @location ref); + +constant_value(unique int id: @variable ref, + varchar(900) value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @accessor | @event_accessor | @variable | @indexer | @anonymous_function_expr; + +methods(unique int id: @method, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int type_id: @type ref, + int unbound_id: @method ref); + +method_location(int id: @method ref, + int loc: @location ref); + +constructors(unique int id: @constructor, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location(int id: @constructor ref, + int loc: @location ref); + +destructors(unique int id: @destructor, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location(int id: @destructor ref, + int loc: @location ref); + +overrides(int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + unique int id: @member ref, + int interface_id: @interface_type ref +); + +/** VARIABLES **/ + +@variable = @local_variable | @parameter | @field; + +fields(unique int id: @field, + int kind: int ref, + varchar(900) name: string ref, + int declaring_type_id: @type ref, + int type_id: @type ref, + int unbound_id: @field ref); +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location(int id: @field ref, + int loc: @location ref); + +localvars(unique int id: @local_variable, + int kind: int ref, + varchar(900) name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type ref, + int parent_id: @local_var_decl_expr ref); +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant + ; + +localvar_location(unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type; + +params(unique int id: @parameter, + varchar(900) name: string ref, + int type_id: @type ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location(int id: @parameter ref, + int loc: @location ref); + +/** STATEMENTS **/ + +statements(unique int id: @stmt, + int kind: int ref, + int index: int ref, + int parent: @exprorstmt_parent ref); +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case + ; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt; + +stmt_location(unique int id: @stmt ref, + int loc: @location ref); + +catch_type(unique int catch_id: @catch ref, + int type_id: @type ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +/** EXPRESSIONS **/ + +expressions(unique int id: @expr, + int kind: int ref, + int type_id: @type ref, + int index: int ref, + int parent: @exprorstmt_parent ref); +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 87 = @dynamic_conversion_expr +| 88 = @dynamic_unary_conversion_expr +| 89 = @dynamic_invocation_expr +| 90 = @dynamic_event_compound_assign_expr +| 91 = @dynamic_constructor_binder_expr +| 92 = @dynamic_index_binder_expr +| 93 = @dynamic_member_binder_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr + ; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr | @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @method_access_expr + | @event_access_expr | @indexer_access_expr | @type_access_expr; +@access_expr = @member_access_expr | @local_variable_access_expr | @parameter_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr; + +@dynamic_expr = @dynamic_conversion_expr | @dynamic_unary_conversion_expr | @dynamic_invocation_expr + | @dynamic_event_compound_assign_expr | @dynamic_constructor_binder_expr | @dynamic_index_binder_expr + | @dynamic_member_binder_expr; + +object_creation_mode(unique int id: @object_creation_expr ref, + int mode: int ref /* normal = 1, default value type = 2, type parameter = 3*/); + +implicitly_typed_array_creation(unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation(unique int id: @array_creation_expr ref); + +mutator_invocation_mode(unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated(unique int id: @expr ref); + +expr_value(int id: @expr ref, + varchar(900) value: string ref); + +expr_call(unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access(unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); +@accessible = @method | @field | @property | @indexer | @event | @variable; + +expr_location(unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name(unique int id: @dynamic_expr ref, + varchar(900) name: string ref); + +/** CONTROL-FLOW **/ + +@cfg_node = @stmt | @expr | @callable; +@loop = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; +@breakable = @loop | @switch_stmt; + +successors(int from: @cfg_node ref, + int to: @cfg_node ref); + +truecond(int from: @cfg_node ref, + int to: @cfg_node ref); + +falsecond(int from: @cfg_node ref, + int to: @cfg_node ref); + +breaks(int scope: @breakable ref, + int stmt: @break_stmt ref); + +break_target(int scope: @breakable ref, + int next: @cfg_node ref); + +continues(int scope: @loop ref, + int stmt: @continue_stmt ref); + +continue_target(int scope: @loop ref, + int next: @cfg_node ref); + +goto(int from: @cfg_node ref, + int to: @labeled_stmt ref); + +/* a jump from inside to outside of a try-finally statement + executes the finally block "on the way", thus a jump + can take place in several steps: */ + +jump_step(int origin: @cfg_node ref, + int from: @cfg_node ref, + int to: @cfg_node ref); + +last_finally_node(int try: @try_stmt ref, + int node: @cfg_node ref); + +jump_if_true(int node: @cfg_node ref); + +jump_if_false(int node: @cfg_node ref); + +/* XML Files */ + +xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref); + +xmlDTDs (unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref); + +xmlElements (unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs (unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs (int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) 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, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars (unique int id: @xmlcharacters, + varchar(3600) 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/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 299d8880abc..0de57f8d135 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.9 + +## 0.0.8 + ## 0.0.7 ## 0.0.6 diff --git a/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql b/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql index f37cd452a58..262949b7b3b 100644 --- a/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql +++ b/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql @@ -4,7 +4,7 @@ * @kind path-problem * @problem.severity error * @security-severity 9.8 - * @precision high + * @precision medium * @id cs/hardcoded-connection-string-credentials * @tags security * external/cwe/cwe-259 diff --git a/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql b/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql index b55e9dddbfe..740fbfe124f 100644 --- a/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql +++ b/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql @@ -4,7 +4,7 @@ * @kind path-problem * @problem.severity error * @security-severity 9.8 - * @precision high + * @precision medium * @id cs/hardcoded-credentials * @tags security * external/cwe/cwe-259 diff --git a/csharp/ql/src/Stubs/make_stubs_nuget.py b/csharp/ql/src/Stubs/make_stubs_nuget.py index a238c921585..c95ab3a0258 100644 --- a/csharp/ql/src/Stubs/make_stubs_nuget.py +++ b/csharp/ql/src/Stubs/make_stubs_nuget.py @@ -8,7 +8,7 @@ import shutil def write_csproj_prefix(ioWrapper): ioWrapper.write('\n') ioWrapper.write(' \n') - ioWrapper.write(' net5.0\n') + ioWrapper.write(' net6.0\n') ioWrapper.write(' true\n') ioWrapper.write(' bin\\n') ioWrapper.write( @@ -60,7 +60,7 @@ jsonFile = os.path.join(rawOutputDir, outputName + '.json') version = helpers.get_argv(2, "latest") print("\n* Creating new input project") -run_cmd(['dotnet', 'new', 'classlib', "-f", "net5.0", "--language", "C#", '--name', +run_cmd(['dotnet', 'new', 'classlib', "-f", "net6.0", "--language", "C#", '--name', projectNameIn, '--output', projectDirIn]) helpers.remove_files(projectDirIn, '.cs') @@ -71,7 +71,7 @@ if (version != "latest"): cmd.append(version) run_cmd(cmd) -sdk_version = '5.0.402' +sdk_version = '6.0.101' 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/change-notes/2022-02-15-hardcoded-credentials-downgrade.md b/csharp/ql/src/change-notes/2022-02-15-hardcoded-credentials-downgrade.md new file mode 100644 index 00000000000..a33c09ab18d --- /dev/null +++ b/csharp/ql/src/change-notes/2022-02-15-hardcoded-credentials-downgrade.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +The precision of hardcoded credentials queries (`cs/hardcoded-credentials` and +`cs/hardcoded-connection-string-credentials`) have been downgraded to medium. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/released/0.0.8.md b/csharp/ql/src/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..bc5efa50ee2 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.0.8.md @@ -0,0 +1 @@ +## 0.0.8 diff --git a/csharp/ql/src/change-notes/released/0.0.9.md b/csharp/ql/src/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..a64559b3ac8 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.0.9.md @@ -0,0 +1 @@ +## 0.0.9 diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index a2a5484910b..ecdd64fbab8 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.9 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index d4b980a6cd3..fe6c62e31b6 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.0.8-dev +version: 0.0.10-dev groups: - csharp - queries diff --git a/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll b/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll index 52a790cca28..7d605a491ee 100644 --- a/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll +++ b/csharp/ql/test/TestUtilities/InlineExpectationsTest.qll @@ -93,7 +93,7 @@ private import InlineExpectationsTestPrivate /** - * Base class for tests with inline expectations. The test extends this class to provide the actual + * The base class for tests with inline expectations. The test extends this class to provide the actual * results of the query, which are then compared with the expected results in comments to produce a * list of failure messages that point out where the actual results differ from the expected * results. @@ -123,6 +123,15 @@ abstract class InlineExpectationsTest extends string { */ abstract predicate hasActualResult(Location location, string element, string tag, string value); + /** + * Like `hasActualResult`, but returns results that do not require a matching annotation. + * A failure will still arise if there is an annotation that does not match any results, but not vice versa. + * Override this predicate to specify optional results. + */ + predicate hasOptionalResult(Location location, string element, string tag, string value) { + none() + } + final predicate hasFailureMessage(FailureLocatable element, string message) { exists(ActualResult actualResult | actualResult.getTest() = this and @@ -134,7 +143,8 @@ abstract class InlineExpectationsTest extends string { ) or not exists(ValidExpectation expectation | expectation.matchesActualResult(actualResult)) and - message = "Unexpected result: " + actualResult.getExpectationText() + message = "Unexpected result: " + actualResult.getExpectationText() and + not actualResult.isOptional() ) ) or @@ -243,9 +253,13 @@ private string expectationPattern() { private newtype TFailureLocatable = TActualResult( - InlineExpectationsTest test, Location location, string element, string tag, string value + InlineExpectationsTest test, Location location, string element, string tag, string value, + boolean optional ) { - test.hasActualResult(location, element, tag, value) + test.hasActualResult(location, element, tag, value) and + optional = false + or + test.hasOptionalResult(location, element, tag, value) and optional = true } or TValidExpectation(ExpectationComment comment, string tag, string value, string knownFailure) { exists(TColumn column, string tags | @@ -277,8 +291,9 @@ class ActualResult extends FailureLocatable, TActualResult { string element; string tag; string value; + boolean optional; - ActualResult() { this = TActualResult(test, location, element, tag, value) } + ActualResult() { this = TActualResult(test, location, element, tag, value, optional) } override string toString() { result = element } @@ -289,6 +304,8 @@ class ActualResult extends FailureLocatable, TActualResult { override string getTag() { result = tag } override string getValue() { result = value } + + predicate isOptional() { optional = true } } abstract private class Expectation extends FailureLocatable { diff --git a/csharp/ql/test/library-tests/arguments/PrintAst.expected b/csharp/ql/test/library-tests/arguments/PrintAst.expected index fa42026085d..dc04a837b4b 100644 --- a/csharp/ql/test/library-tests/arguments/PrintAst.expected +++ b/csharp/ql/test/library-tests/arguments/PrintAst.expected @@ -222,14 +222,14 @@ arguments.cs: # 66| 14: [Method] f6 # 66| -1: [TypeMention] Void #-----| 0: (Attributes) -# 65| 1: [Attribute] [My(...)] +# 65| 1: [DefaultAttribute] [My(...)] # 65| -1: [TypeMention] MyAttribute # 65| 0: [BoolLiteral] false # 66| 4: [BlockStmt] {...} # 69| 15: [Method] f7 # 69| -1: [TypeMention] Void #-----| 0: (Attributes) -# 68| 1: [Attribute] [My(...)] +# 68| 1: [DefaultAttribute] [My(...)] # 68| -1: [TypeMention] MyAttribute # 68| 0: [BoolLiteral] true # 68| 1: [StringLiteral] "" diff --git a/csharp/ql/test/library-tests/assemblies/compilation.expected b/csharp/ql/test/library-tests/assemblies/compilation.expected index 9fbb90c90ef..20cacbb0efd 100644 --- a/csharp/ql/test/library-tests/assemblies/compilation.expected +++ b/csharp/ql/test/library-tests/assemblies/compilation.expected @@ -1,9 +1,9 @@ | Assembly1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | no compilation | | Locations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | has compilation | | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | no compilation | -| System.Console, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | no compilation | +| System.Console, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | no compilation | | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | no compilation | -| System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | no compilation | -| System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | no compilation | -| System.Runtime.Extensions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | no compilation | +| System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e | no compilation | +| System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | no compilation | +| System.Runtime.Extensions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | no compilation | | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | no compilation | diff --git a/csharp/ql/test/library-tests/attributes/AttributeArguments.expected b/csharp/ql/test/library-tests/attributes/AttributeArguments.expected index 22bd3b71cda..fe29160c8e0 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeArguments.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeArguments.expected @@ -17,30 +17,36 @@ arguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | 5 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 5 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 5 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | -| attributes.cs:10:12:10:24 | [AssemblyTitle(...)] | 0 | attributes.cs:10:26:10:45 | "C# attributes test" | -| attributes.cs:11:12:11:30 | [AssemblyDescription(...)] | 0 | attributes.cs:11:32:11:56 | "A test of C# attributes" | -| attributes.cs:12:12:12:32 | [AssemblyConfiguration(...)] | 0 | attributes.cs:12:34:12:35 | "" | -| attributes.cs:13:12:13:26 | [AssemblyCompany(...)] | 0 | attributes.cs:13:28:13:39 | "Semmle Plc" | -| attributes.cs:14:12:14:26 | [AssemblyProduct(...)] | 0 | attributes.cs:14:28:14:34 | "Odasa" | -| attributes.cs:15:12:15:28 | [AssemblyCopyright(...)] | 0 | attributes.cs:15:30:15:54 | "Copyright \u00a9 Semmle 2018" | -| attributes.cs:16:12:16:28 | [AssemblyTrademark(...)] | 0 | attributes.cs:16:30:16:31 | "" | -| attributes.cs:17:12:17:26 | [AssemblyCulture(...)] | 0 | attributes.cs:17:28:17:29 | "" | -| attributes.cs:22:12:22:21 | [ComVisible(...)] | 0 | attributes.cs:22:23:22:27 | false | -| attributes.cs:25:12:25:15 | [Guid(...)] | 0 | attributes.cs:25:17:25:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | -| attributes.cs:37:12:37:26 | [AssemblyVersion(...)] | 0 | attributes.cs:37:28:37:36 | "1.0.0.0" | -| attributes.cs:38:12:38:30 | [AssemblyFileVersion(...)] | 0 | attributes.cs:38:32:38:40 | "1.0.0.0" | -| attributes.cs:40:12:40:15 | [Args(...)] | 0 | attributes.cs:40:17:40:17 | 0 | -| attributes.cs:40:12:40:15 | [Args(...)] | 1 | attributes.cs:40:20:40:46 | array creation of type Object[] | -| attributes.cs:40:12:40:15 | [Args(...)] | 2 | attributes.cs:40:49:40:69 | typeof(...) | -| attributes.cs:40:12:40:15 | [Args(...)] | 3 | attributes.cs:40:72:40:76 | (...) ... | -| attributes.cs:40:12:40:15 | [Args(...)] | 4 | attributes.cs:40:79:40:82 | null | -| attributes.cs:40:12:40:15 | [Args(...)] | 5 | attributes.cs:40:92:40:122 | array creation of type Object[] | -| attributes.cs:41:10:41:13 | [Args(...)] | 0 | attributes.cs:41:15:41:15 | 0 | -| attributes.cs:41:10:41:13 | [Args(...)] | 1 | attributes.cs:41:18:41:44 | array creation of type Object[] | -| attributes.cs:41:10:41:13 | [Args(...)] | 2 | attributes.cs:41:47:41:67 | typeof(...) | -| attributes.cs:41:10:41:13 | [Args(...)] | 3 | attributes.cs:41:70:41:74 | (...) ... | -| attributes.cs:41:10:41:13 | [Args(...)] | 4 | attributes.cs:41:77:41:80 | null | -| attributes.cs:41:10:41:13 | [Args(...)] | 5 | attributes.cs:41:90:41:120 | array creation of type Object[] | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 42 | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 1 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 2 | Assembly1.dll:0:0:0:0 | null | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 3 | Assembly1.dll:0:0:0:0 | (...) ... | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 5 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | +| attributes.cs:10:12:10:24 | [assembly: AssemblyTitle(...)] | 0 | attributes.cs:10:26:10:45 | "C# attributes test" | +| attributes.cs:11:12:11:30 | [assembly: AssemblyDescription(...)] | 0 | attributes.cs:11:32:11:56 | "A test of C# attributes" | +| attributes.cs:12:12:12:32 | [assembly: AssemblyConfiguration(...)] | 0 | attributes.cs:12:34:12:35 | "" | +| attributes.cs:13:12:13:26 | [assembly: AssemblyCompany(...)] | 0 | attributes.cs:13:28:13:39 | "Semmle Plc" | +| attributes.cs:14:12:14:26 | [assembly: AssemblyProduct(...)] | 0 | attributes.cs:14:28:14:34 | "Odasa" | +| attributes.cs:15:12:15:28 | [assembly: AssemblyCopyright(...)] | 0 | attributes.cs:15:30:15:54 | "Copyright \u00a9 Semmle 2018" | +| attributes.cs:16:12:16:28 | [assembly: AssemblyTrademark(...)] | 0 | attributes.cs:16:30:16:31 | "" | +| attributes.cs:17:12:17:26 | [assembly: AssemblyCulture(...)] | 0 | attributes.cs:17:28:17:29 | "" | +| attributes.cs:22:12:22:21 | [assembly: ComVisible(...)] | 0 | attributes.cs:22:23:22:27 | false | +| attributes.cs:25:12:25:15 | [assembly: Guid(...)] | 0 | attributes.cs:25:17:25:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | +| attributes.cs:37:12:37:26 | [assembly: AssemblyVersion(...)] | 0 | attributes.cs:37:28:37:36 | "1.0.0.0" | +| attributes.cs:38:12:38:30 | [assembly: AssemblyFileVersion(...)] | 0 | attributes.cs:38:32:38:40 | "1.0.0.0" | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 0 | attributes.cs:40:17:40:17 | 0 | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 1 | attributes.cs:40:20:40:46 | array creation of type Object[] | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 2 | attributes.cs:40:49:40:69 | typeof(...) | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 3 | attributes.cs:40:72:40:76 | (...) ... | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 4 | attributes.cs:40:79:40:82 | null | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 5 | attributes.cs:40:92:40:122 | array creation of type Object[] | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 0 | attributes.cs:41:15:41:15 | 0 | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 1 | attributes.cs:41:18:41:44 | array creation of type Object[] | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 2 | attributes.cs:41:47:41:67 | typeof(...) | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 3 | attributes.cs:41:70:41:74 | (...) ... | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 4 | attributes.cs:41:77:41:80 | null | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 5 | attributes.cs:41:90:41:120 | array creation of type Object[] | | attributes.cs:43:2:43:22 | [AttributeUsage(...)] | 0 | attributes.cs:43:24:43:50 | access to constant All | | attributes.cs:46:6:46:16 | [Conditional(...)] | 0 | attributes.cs:46:18:46:25 | "DEBUG2" | | attributes.cs:54:6:54:16 | [My(...)] | 0 | attributes.cs:54:18:54:22 | false | @@ -64,6 +70,26 @@ arguments | attributes.cs:80:6:80:9 | [Args(...)] | 3 | attributes.cs:80:48:80:52 | (...) ... | | attributes.cs:80:6:80:9 | [Args(...)] | 4 | attributes.cs:80:55:80:58 | null | | attributes.cs:80:6:80:9 | [Args(...)] | 5 | attributes.cs:80:68:80:98 | array creation of type Object[] | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 0 | attributes.cs:81:19:81:24 | ... + ... | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 1 | attributes.cs:81:27:81:47 | array creation of type Int32[] | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 2 | attributes.cs:81:50:81:53 | null | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 3 | attributes.cs:81:56:81:60 | (...) ... | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 4 | attributes.cs:81:63:81:66 | null | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 5 | attributes.cs:81:76:81:106 | array creation of type Object[] | +| attributes.cs:96:2:96:13 | [My3(...)] | 0 | attributes.cs:96:15:96:15 | 1 | +| attributes.cs:97:10:97:21 | [return: My3(...)] | 0 | attributes.cs:97:23:97:23 | 2 | +| attributes.cs:100:10:100:21 | [return: My3(...)] | 0 | attributes.cs:100:23:100:23 | 3 | +| attributes.cs:101:8:101:19 | [My3(...)] | 0 | attributes.cs:101:21:101:21 | 4 | +| attributes.cs:106:6:106:17 | [My3(...)] | 0 | attributes.cs:106:19:106:19 | 5 | +| attributes.cs:107:14:107:25 | [return: My3(...)] | 0 | attributes.cs:107:27:107:27 | 6 | +| attributes.cs:112:10:112:21 | [My3(...)] | 0 | attributes.cs:112:23:112:23 | 7 | +| attributes.cs:113:18:113:29 | [return: My3(...)] | 0 | attributes.cs:113:31:113:31 | 8 | +| attributes.cs:116:18:116:29 | [My3(...)] | 0 | attributes.cs:116:31:116:31 | 9 | +| attributes.cs:117:17:117:28 | [My3(...)] | 0 | attributes.cs:117:30:117:31 | 10 | +| attributes.cs:124:18:124:29 | [My3(...)] | 0 | attributes.cs:124:31:124:32 | 11 | +| attributes.cs:125:18:125:29 | [return: My3(...)] | 0 | attributes.cs:125:31:125:32 | 12 | +| attributes.cs:128:10:128:21 | [My3(...)] | 0 | attributes.cs:128:23:128:24 | 13 | +| attributes.cs:129:17:129:28 | [My3(...)] | 0 | attributes.cs:129:30:129:31 | 14 | constructorArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 1 | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 3 | @@ -80,28 +106,33 @@ constructorArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | null | | Assembly1.dll:0:0:0:0 | [Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | null | -| attributes.cs:10:12:10:24 | [AssemblyTitle(...)] | 0 | attributes.cs:10:26:10:45 | "C# attributes test" | -| attributes.cs:11:12:11:30 | [AssemblyDescription(...)] | 0 | attributes.cs:11:32:11:56 | "A test of C# attributes" | -| attributes.cs:12:12:12:32 | [AssemblyConfiguration(...)] | 0 | attributes.cs:12:34:12:35 | "" | -| attributes.cs:13:12:13:26 | [AssemblyCompany(...)] | 0 | attributes.cs:13:28:13:39 | "Semmle Plc" | -| attributes.cs:14:12:14:26 | [AssemblyProduct(...)] | 0 | attributes.cs:14:28:14:34 | "Odasa" | -| attributes.cs:15:12:15:28 | [AssemblyCopyright(...)] | 0 | attributes.cs:15:30:15:54 | "Copyright \u00a9 Semmle 2018" | -| attributes.cs:16:12:16:28 | [AssemblyTrademark(...)] | 0 | attributes.cs:16:30:16:31 | "" | -| attributes.cs:17:12:17:26 | [AssemblyCulture(...)] | 0 | attributes.cs:17:28:17:29 | "" | -| attributes.cs:22:12:22:21 | [ComVisible(...)] | 0 | attributes.cs:22:23:22:27 | false | -| attributes.cs:25:12:25:15 | [Guid(...)] | 0 | attributes.cs:25:17:25:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | -| attributes.cs:37:12:37:26 | [AssemblyVersion(...)] | 0 | attributes.cs:37:28:37:36 | "1.0.0.0" | -| attributes.cs:38:12:38:30 | [AssemblyFileVersion(...)] | 0 | attributes.cs:38:32:38:40 | "1.0.0.0" | -| attributes.cs:40:12:40:15 | [Args(...)] | 0 | attributes.cs:40:17:40:17 | 0 | -| attributes.cs:40:12:40:15 | [Args(...)] | 1 | attributes.cs:40:20:40:46 | array creation of type Object[] | -| attributes.cs:40:12:40:15 | [Args(...)] | 2 | attributes.cs:40:49:40:69 | typeof(...) | -| attributes.cs:40:12:40:15 | [Args(...)] | 3 | attributes.cs:40:72:40:76 | (...) ... | -| attributes.cs:40:12:40:15 | [Args(...)] | 4 | attributes.cs:40:79:40:82 | null | -| attributes.cs:41:10:41:13 | [Args(...)] | 0 | attributes.cs:41:15:41:15 | 0 | -| attributes.cs:41:10:41:13 | [Args(...)] | 1 | attributes.cs:41:18:41:44 | array creation of type Object[] | -| attributes.cs:41:10:41:13 | [Args(...)] | 2 | attributes.cs:41:47:41:67 | typeof(...) | -| attributes.cs:41:10:41:13 | [Args(...)] | 3 | attributes.cs:41:70:41:74 | (...) ... | -| attributes.cs:41:10:41:13 | [Args(...)] | 4 | attributes.cs:41:77:41:80 | null | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 0 | Assembly1.dll:0:0:0:0 | 42 | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 1 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 2 | Assembly1.dll:0:0:0:0 | null | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 3 | Assembly1.dll:0:0:0:0 | (...) ... | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | 4 | Assembly1.dll:0:0:0:0 | array creation of type Int32[] | +| attributes.cs:10:12:10:24 | [assembly: AssemblyTitle(...)] | 0 | attributes.cs:10:26:10:45 | "C# attributes test" | +| attributes.cs:11:12:11:30 | [assembly: AssemblyDescription(...)] | 0 | attributes.cs:11:32:11:56 | "A test of C# attributes" | +| attributes.cs:12:12:12:32 | [assembly: AssemblyConfiguration(...)] | 0 | attributes.cs:12:34:12:35 | "" | +| attributes.cs:13:12:13:26 | [assembly: AssemblyCompany(...)] | 0 | attributes.cs:13:28:13:39 | "Semmle Plc" | +| attributes.cs:14:12:14:26 | [assembly: AssemblyProduct(...)] | 0 | attributes.cs:14:28:14:34 | "Odasa" | +| attributes.cs:15:12:15:28 | [assembly: AssemblyCopyright(...)] | 0 | attributes.cs:15:30:15:54 | "Copyright \u00a9 Semmle 2018" | +| attributes.cs:16:12:16:28 | [assembly: AssemblyTrademark(...)] | 0 | attributes.cs:16:30:16:31 | "" | +| attributes.cs:17:12:17:26 | [assembly: AssemblyCulture(...)] | 0 | attributes.cs:17:28:17:29 | "" | +| attributes.cs:22:12:22:21 | [assembly: ComVisible(...)] | 0 | attributes.cs:22:23:22:27 | false | +| attributes.cs:25:12:25:15 | [assembly: Guid(...)] | 0 | attributes.cs:25:17:25:54 | "2f70fdd6-14aa-4850-b053-d547adb1f476" | +| attributes.cs:37:12:37:26 | [assembly: AssemblyVersion(...)] | 0 | attributes.cs:37:28:37:36 | "1.0.0.0" | +| attributes.cs:38:12:38:30 | [assembly: AssemblyFileVersion(...)] | 0 | attributes.cs:38:32:38:40 | "1.0.0.0" | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 0 | attributes.cs:40:17:40:17 | 0 | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 1 | attributes.cs:40:20:40:46 | array creation of type Object[] | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 2 | attributes.cs:40:49:40:69 | typeof(...) | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 3 | attributes.cs:40:72:40:76 | (...) ... | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | 4 | attributes.cs:40:79:40:82 | null | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 0 | attributes.cs:41:15:41:15 | 0 | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 1 | attributes.cs:41:18:41:44 | array creation of type Object[] | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 2 | attributes.cs:41:47:41:67 | typeof(...) | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 3 | attributes.cs:41:70:41:74 | (...) ... | +| attributes.cs:41:10:41:13 | [module: Args(...)] | 4 | attributes.cs:41:77:41:80 | null | | attributes.cs:43:2:43:22 | [AttributeUsage(...)] | 0 | attributes.cs:43:24:43:50 | access to constant All | | attributes.cs:46:6:46:16 | [Conditional(...)] | 0 | attributes.cs:46:18:46:25 | "DEBUG2" | | attributes.cs:54:6:54:16 | [My(...)] | 0 | attributes.cs:54:18:54:22 | false | @@ -120,14 +151,35 @@ constructorArguments | attributes.cs:80:6:80:9 | [Args(...)] | 2 | attributes.cs:80:42:80:45 | null | | attributes.cs:80:6:80:9 | [Args(...)] | 3 | attributes.cs:80:48:80:52 | (...) ... | | attributes.cs:80:6:80:9 | [Args(...)] | 4 | attributes.cs:80:55:80:58 | null | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 0 | attributes.cs:81:19:81:24 | ... + ... | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 1 | attributes.cs:81:27:81:47 | array creation of type Int32[] | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 2 | attributes.cs:81:50:81:53 | null | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 3 | attributes.cs:81:56:81:60 | (...) ... | +| attributes.cs:81:14:81:17 | [return: Args(...)] | 4 | attributes.cs:81:63:81:66 | null | +| attributes.cs:96:2:96:13 | [My3(...)] | 0 | attributes.cs:96:15:96:15 | 1 | +| attributes.cs:97:10:97:21 | [return: My3(...)] | 0 | attributes.cs:97:23:97:23 | 2 | +| attributes.cs:100:10:100:21 | [return: My3(...)] | 0 | attributes.cs:100:23:100:23 | 3 | +| attributes.cs:101:8:101:19 | [My3(...)] | 0 | attributes.cs:101:21:101:21 | 4 | +| attributes.cs:106:6:106:17 | [My3(...)] | 0 | attributes.cs:106:19:106:19 | 5 | +| attributes.cs:107:14:107:25 | [return: My3(...)] | 0 | attributes.cs:107:27:107:27 | 6 | +| attributes.cs:112:10:112:21 | [My3(...)] | 0 | attributes.cs:112:23:112:23 | 7 | +| attributes.cs:113:18:113:29 | [return: My3(...)] | 0 | attributes.cs:113:31:113:31 | 8 | +| attributes.cs:116:18:116:29 | [My3(...)] | 0 | attributes.cs:116:31:116:31 | 9 | +| attributes.cs:117:17:117:28 | [My3(...)] | 0 | attributes.cs:117:30:117:31 | 10 | +| attributes.cs:124:18:124:29 | [My3(...)] | 0 | attributes.cs:124:31:124:32 | 11 | +| attributes.cs:125:18:125:29 | [return: My3(...)] | 0 | attributes.cs:125:31:125:32 | 12 | +| attributes.cs:128:10:128:21 | [My3(...)] | 0 | attributes.cs:128:23:128:24 | 13 | +| attributes.cs:129:17:129:28 | [My3(...)] | 0 | attributes.cs:129:30:129:31 | 14 | namedArguments | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | | Assembly1.dll:0:0:0:0 | [Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | -| attributes.cs:40:12:40:15 | [Args(...)] | Prop | attributes.cs:40:92:40:122 | array creation of type Object[] | -| attributes.cs:41:10:41:13 | [Args(...)] | Prop | attributes.cs:41:90:41:120 | array creation of type Object[] | +| Assembly1.dll:0:0:0:0 | [return: Custom(...)] | Prop2 | Assembly1.dll:0:0:0:0 | array creation of type Object[] | +| attributes.cs:40:12:40:15 | [assembly: Args(...)] | Prop | attributes.cs:40:92:40:122 | array creation of type Object[] | +| attributes.cs:41:10:41:13 | [module: Args(...)] | Prop | attributes.cs:41:90:41:120 | array creation of type Object[] | | attributes.cs:57:6:57:16 | [My(...)] | x | attributes.cs:57:36:57:36 | 0 | | attributes.cs:57:6:57:16 | [My(...)] | y | attributes.cs:57:28:57:29 | "" | | attributes.cs:58:6:58:8 | [My2(...)] | X | attributes.cs:58:39:58:40 | 42 | | attributes.cs:77:2:77:5 | [Args(...)] | Prop | attributes.cs:77:63:77:93 | array creation of type Object[] | | attributes.cs:80:6:80:9 | [Args(...)] | Prop | attributes.cs:80:68:80:98 | array creation of type Object[] | +| attributes.cs:81:14:81:17 | [return: Args(...)] | Prop | attributes.cs:81:76:81:106 | array creation of type Object[] | diff --git a/csharp/ql/test/library-tests/attributes/AttributeComments.expected b/csharp/ql/test/library-tests/attributes/AttributeComments.expected index 75ec635cc6a..55c71024afe 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeComments.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeComments.expected @@ -1,4 +1,4 @@ -| attributes.cs:10:12:10:24 | [AssemblyTitle(...)] | attributes.cs:7:1:9:31 | // ... | -| attributes.cs:22:12:22:21 | [ComVisible(...)] | attributes.cs:19:1:21:58 | // ... | -| attributes.cs:25:12:25:15 | [Guid(...)] | attributes.cs:24:1:24:84 | // ... | -| attributes.cs:37:12:37:26 | [AssemblyVersion(...)] | attributes.cs:27:1:36:39 | // ... | +| attributes.cs:10:12:10:24 | [assembly: AssemblyTitle(...)] | attributes.cs:7:1:9:31 | // ... | +| attributes.cs:22:12:22:21 | [assembly: ComVisible(...)] | attributes.cs:19:1:21:58 | // ... | +| attributes.cs:25:12:25:15 | [assembly: Guid(...)] | attributes.cs:24:1:24:84 | // ... | +| attributes.cs:37:12:37:26 | [assembly: AssemblyVersion(...)] | attributes.cs:27:1:36:39 | // ... | diff --git a/csharp/ql/test/library-tests/attributes/AttributeElements.expected b/csharp/ql/test/library-tests/attributes/AttributeElements.expected index b9e12f35bcf..ffdef293b70 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeElements.expected +++ b/csharp/ql/test/library-tests/attributes/AttributeElements.expected @@ -17,17 +17,32 @@ | attributes.cs:59:10:59:11 | M2 | attributes.cs:58:6:58:8 | [My2(...)] | My2Attribute | | attributes.cs:78:14:78:14 | X | attributes.cs:77:2:77:5 | [Args(...)] | ArgsAttribute | | attributes.cs:82:9:82:18 | SomeMethod | attributes.cs:80:6:80:9 | [Args(...)] | ArgsAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:10:12:10:24 | [AssemblyTitle(...)] | System.Reflection.AssemblyTitleAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:11:12:11:30 | [AssemblyDescription(...)] | System.Reflection.AssemblyDescriptionAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:12:12:12:32 | [AssemblyConfiguration(...)] | System.Reflection.AssemblyConfigurationAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:13:12:13:26 | [AssemblyCompany(...)] | System.Reflection.AssemblyCompanyAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:14:12:14:26 | [AssemblyProduct(...)] | System.Reflection.AssemblyProductAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:15:12:15:28 | [AssemblyCopyright(...)] | System.Reflection.AssemblyCopyrightAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:16:12:16:28 | [AssemblyTrademark(...)] | System.Reflection.AssemblyTrademarkAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:17:12:17:26 | [AssemblyCulture(...)] | System.Reflection.AssemblyCultureAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:22:12:22:21 | [ComVisible(...)] | System.Runtime.InteropServices.ComVisibleAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:25:12:25:15 | [Guid(...)] | System.Runtime.InteropServices.GuidAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:37:12:37:26 | [AssemblyVersion(...)] | System.Reflection.AssemblyVersionAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:38:12:38:30 | [AssemblyFileVersion(...)] | System.Reflection.AssemblyFileVersionAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:40:12:40:15 | [Args(...)] | ArgsAttribute | -| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:41:10:41:13 | [Args(...)] | ArgsAttribute | +| attributes.cs:82:9:82:18 | SomeMethod | attributes.cs:81:14:81:17 | [return: Args(...)] | ArgsAttribute | +| attributes.cs:98:14:98:24 | Invoke | attributes.cs:97:10:97:21 | [return: My3(...)] | My3Attribute | +| attributes.cs:98:14:98:24 | My1Delegate | attributes.cs:96:2:96:13 | [My3(...)] | My3Attribute | +| attributes.cs:102:17:102:27 | Invoke | attributes.cs:100:10:100:21 | [return: My3(...)] | My3Attribute | +| attributes.cs:102:17:102:27 | My2Delegate | attributes.cs:101:8:101:19 | [My3(...)] | My3Attribute | +| attributes.cs:108:32:108:32 | + | attributes.cs:106:6:106:17 | [My3(...)] | My3Attribute | +| attributes.cs:108:32:108:32 | + | attributes.cs:107:14:107:25 | [return: My3(...)] | My3Attribute | +| attributes.cs:114:9:114:11 | get_Item | attributes.cs:112:10:112:21 | [My3(...)] | My3Attribute | +| attributes.cs:114:9:114:11 | get_Item | attributes.cs:113:18:113:29 | [return: My3(...)] | My3Attribute | +| attributes.cs:118:9:118:11 | set_Item | attributes.cs:116:18:116:29 | [My3(...)] | My3Attribute | +| attributes.cs:118:9:118:11 | value | attributes.cs:117:17:117:28 | [My3(...)] | My3Attribute | +| attributes.cs:126:9:126:11 | get_Prop1 | attributes.cs:124:18:124:29 | [My3(...)] | My3Attribute | +| attributes.cs:126:9:126:11 | get_Prop1 | attributes.cs:125:18:125:29 | [return: My3(...)] | My3Attribute | +| attributes.cs:130:9:130:11 | set_Prop1 | attributes.cs:128:10:128:21 | [My3(...)] | My3Attribute | +| attributes.cs:130:9:130:11 | value | attributes.cs:129:17:129:28 | [My3(...)] | My3Attribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:10:12:10:24 | [assembly: AssemblyTitle(...)] | System.Reflection.AssemblyTitleAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:11:12:11:30 | [assembly: AssemblyDescription(...)] | System.Reflection.AssemblyDescriptionAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:12:12:12:32 | [assembly: AssemblyConfiguration(...)] | System.Reflection.AssemblyConfigurationAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:13:12:13:26 | [assembly: AssemblyCompany(...)] | System.Reflection.AssemblyCompanyAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:14:12:14:26 | [assembly: AssemblyProduct(...)] | System.Reflection.AssemblyProductAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:15:12:15:28 | [assembly: AssemblyCopyright(...)] | System.Reflection.AssemblyCopyrightAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:16:12:16:28 | [assembly: AssemblyTrademark(...)] | System.Reflection.AssemblyTrademarkAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:17:12:17:26 | [assembly: AssemblyCulture(...)] | System.Reflection.AssemblyCultureAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:22:12:22:21 | [assembly: ComVisible(...)] | System.Runtime.InteropServices.ComVisibleAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:25:12:25:15 | [assembly: Guid(...)] | System.Runtime.InteropServices.GuidAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:37:12:37:26 | [assembly: AssemblyVersion(...)] | System.Reflection.AssemblyVersionAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:38:12:38:30 | [assembly: AssemblyFileVersion(...)] | System.Reflection.AssemblyFileVersionAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:40:12:40:15 | [assembly: Args(...)] | ArgsAttribute | +| attributes.dll:0:0:0:0 | attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null | attributes.cs:41:10:41:13 | [module: Args(...)] | ArgsAttribute | diff --git a/csharp/ql/test/library-tests/attributes/AttributeElements.ql b/csharp/ql/test/library-tests/attributes/AttributeElements.ql index c0d62ed0e63..cbcfae12bda 100644 --- a/csharp/ql/test/library-tests/attributes/AttributeElements.ql +++ b/csharp/ql/test/library-tests/attributes/AttributeElements.ql @@ -3,5 +3,5 @@ import csharp from Attributable element, Attribute attribute where attribute = element.getAnAttribute() and - (element.(Element).fromSource() or element.(Assembly).getName() in ["attributes", "Assembly1"]) + (attribute.fromSource() or element.(Assembly).getName() in ["attributes", "Assembly1"]) select element, attribute, attribute.getType().getQualifiedName() diff --git a/csharp/ql/test/library-tests/attributes/PrintAst.expected b/csharp/ql/test/library-tests/attributes/PrintAst.expected index 5876e9521e9..4dd3f129651 100644 --- a/csharp/ql/test/library-tests/attributes/PrintAst.expected +++ b/csharp/ql/test/library-tests/attributes/PrintAst.expected @@ -1,41 +1,41 @@ attributes.cs: -# 10| [Attribute] [AssemblyTitle(...)] +# 10| [AssemblyAttribute] [assembly: AssemblyTitle(...)] # 10| -1: [TypeMention] AssemblyTitleAttribute # 10| 0: [StringLiteral] "C# attributes test" -# 11| [Attribute] [AssemblyDescription(...)] +# 11| [AssemblyAttribute] [assembly: AssemblyDescription(...)] # 11| -1: [TypeMention] AssemblyDescriptionAttribute # 11| 0: [StringLiteral] "A test of C# attributes" -# 12| [Attribute] [AssemblyConfiguration(...)] +# 12| [AssemblyAttribute] [assembly: AssemblyConfiguration(...)] # 12| -1: [TypeMention] AssemblyConfigurationAttribute # 12| 0: [StringLiteral] "" -# 13| [Attribute] [AssemblyCompany(...)] +# 13| [AssemblyAttribute] [assembly: AssemblyCompany(...)] # 13| -1: [TypeMention] AssemblyCompanyAttribute # 13| 0: [StringLiteral] "Semmle Plc" -# 14| [Attribute] [AssemblyProduct(...)] +# 14| [AssemblyAttribute] [assembly: AssemblyProduct(...)] # 14| -1: [TypeMention] AssemblyProductAttribute # 14| 0: [StringLiteral] "Odasa" -# 15| [Attribute] [AssemblyCopyright(...)] +# 15| [AssemblyAttribute] [assembly: AssemblyCopyright(...)] # 15| -1: [TypeMention] AssemblyCopyrightAttribute # 15| 0: [StringLiteral] "Copyright © Semmle 2018" -# 16| [Attribute] [AssemblyTrademark(...)] +# 16| [AssemblyAttribute] [assembly: AssemblyTrademark(...)] # 16| -1: [TypeMention] AssemblyTrademarkAttribute # 16| 0: [StringLiteral] "" -# 17| [Attribute] [AssemblyCulture(...)] +# 17| [AssemblyAttribute] [assembly: AssemblyCulture(...)] # 17| -1: [TypeMention] AssemblyCultureAttribute # 17| 0: [StringLiteral] "" -# 22| [Attribute] [ComVisible(...)] +# 22| [AssemblyAttribute] [assembly: ComVisible(...)] # 22| -1: [TypeMention] ComVisibleAttribute # 22| 0: [BoolLiteral] false -# 25| [Attribute] [Guid(...)] +# 25| [AssemblyAttribute] [assembly: Guid(...)] # 25| -1: [TypeMention] GuidAttribute # 25| 0: [StringLiteral] "2f70fdd6-14aa-4850-b053-d547adb1f476" -# 37| [Attribute] [AssemblyVersion(...)] +# 37| [AssemblyAttribute] [assembly: AssemblyVersion(...)] # 37| -1: [TypeMention] AssemblyVersionAttribute # 37| 0: [StringLiteral] "1.0.0.0" -# 38| [Attribute] [AssemblyFileVersion(...)] +# 38| [AssemblyAttribute] [assembly: AssemblyFileVersion(...)] # 38| -1: [TypeMention] AssemblyFileVersionAttribute # 38| 0: [StringLiteral] "1.0.0.0" -# 40| [Attribute] [Args(...)] +# 40| [AssemblyAttribute] [assembly: Args(...)] # 40| -1: [TypeMention] ArgsAttribute # 40| 0: [IntLiteral] 0 # 40| 1: [ArrayCreation] array creation of type Object[] @@ -64,7 +64,7 @@ attributes.cs: # 40| 1: [TypeofExpr] typeof(...) # 40| 0: [TypeAccess] access to type Int32 # 40| 0: [TypeMention] int -# 41| [Attribute] [Args(...)] +# 41| [ModuleAttribute] [module: Args(...)] # 41| -1: [TypeMention] ArgsAttribute # 41| 0: [IntLiteral] 0 # 41| 1: [ArrayCreation] array creation of type Object[] @@ -95,7 +95,7 @@ attributes.cs: # 41| 0: [TypeMention] int # 44| [Class] Foo #-----| 0: (Attributes) -# 43| 1: [Attribute] [AttributeUsage(...)] +# 43| 1: [DefaultAttribute] [AttributeUsage(...)] # 43| -1: [TypeMention] AttributeUsageAttribute # 43| 0: [MemberConstantAccess] access to constant All # 43| -1: [TypeAccess] access to type AttributeTargets @@ -105,7 +105,7 @@ attributes.cs: # 47| 5: [Method] foo # 47| -1: [TypeMention] Void #-----| 0: (Attributes) -# 46| 1: [Attribute] [Conditional(...)] +# 46| 1: [DefaultAttribute] [Conditional(...)] # 46| -1: [TypeMention] ConditionalAttribute # 46| 0: [StringLiteral] "DEBUG2" # 47| 4: [BlockStmt] {...} @@ -116,7 +116,7 @@ attributes.cs: # 52| 0: [Parameter] x # 52| -1: [TypeMention] int #-----| 0: (Attributes) -# 52| 1: [Attribute] [Foo(...)] +# 52| 1: [DefaultAttribute] [Foo(...)] # 52| 0: [TypeMention] Foo # 52| 4: [BlockStmt] {...} # 52| 0: [ReturnStmt] return ...; @@ -126,19 +126,19 @@ attributes.cs: # 55| 6: [Method] M1 # 55| -1: [TypeMention] Void #-----| 0: (Attributes) -# 54| 1: [Attribute] [My(...)] +# 54| 1: [DefaultAttribute] [My(...)] # 54| -1: [TypeMention] MyAttribute # 54| 0: [BoolLiteral] false # 55| 4: [BlockStmt] {...} # 59| 7: [Method] M2 # 59| -1: [TypeMention] Void #-----| 0: (Attributes) -# 57| 1: [Attribute] [My(...)] +# 57| 1: [DefaultAttribute] [My(...)] # 57| -1: [TypeMention] MyAttribute # 57| 0: [BoolLiteral] true # 57| 1: [StringLiteral] "" # 57| 2: [IntLiteral] 0 -# 58| 2: [Attribute] [My2(...)] +# 58| 2: [DefaultAttribute] [My2(...)] # 58| -1: [TypeMention] My2Attribute # 58| 0: [BoolLiteral] false # 58| 1: [BoolLiteral] true @@ -192,7 +192,7 @@ attributes.cs: # 74| 4: [BlockStmt] {...} # 78| [Class] X #-----| 0: (Attributes) -# 77| 1: [Attribute] [Args(...)] +# 77| 1: [DefaultAttribute] [Args(...)] # 77| -1: [TypeMention] ArgsAttribute # 77| 0: [IntLiteral] 42 # 77| 1: [NullLiteral] null @@ -221,7 +221,7 @@ attributes.cs: # 82| 5: [Method] SomeMethod # 82| -1: [TypeMention] int #-----| 0: (Attributes) -# 80| 1: [Attribute] [Args(...)] +# 80| 1: [DefaultAttribute] [Args(...)] # 80| -1: [TypeMention] ArgsAttribute # 80| 0: [AddExpr] ... + ... # 80| 0: [IntLiteral] 42 @@ -248,6 +248,33 @@ attributes.cs: # 80| 1: [TypeofExpr] typeof(...) # 80| 0: [TypeAccess] access to type Int32 # 80| 0: [TypeMention] int +# 81| 2: [ReturnAttribute] [return: Args(...)] +# 81| -1: [TypeMention] ArgsAttribute +# 81| 0: [AddExpr] ... + ... +# 81| 0: [IntLiteral] 42 +# 81| 1: [IntLiteral] 0 +# 81| 1: [ArrayCreation] array creation of type Int32[] +# 81| -2: [TypeMention] Int32[] +# 81| 1: [TypeMention] int +# 81| -1: [ArrayInitializer] { ..., ... } +# 81| 0: [IntLiteral] 1 +# 81| 1: [IntLiteral] 2 +# 81| 2: [IntLiteral] 3 +# 81| 2: [NullLiteral] null +# 81| 3: [CastExpr] (...) ... +# 81| 0: [TypeAccess] access to type E +# 81| 0: [TypeMention] E +# 81| 1: [IntLiteral] 12 +# 81| 4: [NullLiteral] null +# 81| 5: [ArrayCreation] array creation of type Object[] +# 81| -2: [TypeMention] Object[] +# 81| 1: [TypeMention] object +# 81| -1: [ArrayInitializer] { ..., ... } +# 81| 0: [CastExpr] (...) ... +# 81| 1: [IntLiteral] 1 +# 81| 1: [TypeofExpr] typeof(...) +# 81| 0: [TypeAccess] access to type Int32 +# 81| 0: [TypeMention] int # 82| 4: [BlockStmt] {...} # 82| 0: [ReturnStmt] return ...; # 82| 0: [IntLiteral] 1 @@ -273,3 +300,108 @@ attributes.cs: # 88| -1: [TypeMention] int # 88| 1: [IntLiteral] 13 # 88| 4: [BlockStmt] {...} +# 91| [Class] My3Attribute +#-----| 3: (Base types) +# 91| 0: [TypeMention] Attribute +# 93| 4: [InstanceConstructor] My3Attribute +#-----| 2: (Parameters) +# 93| 0: [Parameter] x +# 93| -1: [TypeMention] int +# 93| 4: [BlockStmt] {...} +# 98| [DelegateType] My1Delegate +#-----| 0: (Attributes) +# 96| 1: [DefaultAttribute] [My3(...)] +# 96| -1: [TypeMention] My3Attribute +# 96| 0: [IntLiteral] 1 +#-----| 2: (Parameters) +# 98| 0: [Parameter] message +# 98| -1: [TypeMention] string +# 102| [DelegateType] My2Delegate +#-----| 0: (Attributes) +# 101| 1: [DefaultAttribute] [My3(...)] +# 101| -1: [TypeMention] My3Attribute +# 101| 0: [IntLiteral] 4 +#-----| 2: (Parameters) +# 102| 0: [Parameter] message +# 102| -1: [TypeMention] string +# 104| [Class] MyAttributeUsage +# 108| 5: [AddOperator] + +# 108| -1: [TypeMention] int +#-----| 0: (Attributes) +# 106| 1: [DefaultAttribute] [My3(...)] +# 106| -1: [TypeMention] My3Attribute +# 106| 0: [IntLiteral] 5 +# 107| 2: [ReturnAttribute] [return: My3(...)] +# 107| -1: [TypeMention] My3Attribute +# 107| 0: [IntLiteral] 6 +#-----| 2: (Parameters) +# 108| 0: [Parameter] a +# 108| -1: [TypeMention] MyAttributeUsage +# 108| 1: [Parameter] b +# 108| -1: [TypeMention] MyAttributeUsage +# 108| 4: [IntLiteral] 0 +# 110| 6: [Indexer] Item +# 110| -1: [TypeMention] int +#-----| 1: (Parameters) +# 110| 0: [Parameter] x +# 110| -1: [TypeMention] int +# 114| 3: [Getter] get_Item +#-----| 0: (Attributes) +# 112| 1: [DefaultAttribute] [My3(...)] +# 112| -1: [TypeMention] My3Attribute +# 112| 0: [IntLiteral] 7 +# 113| 2: [ReturnAttribute] [return: My3(...)] +# 113| -1: [TypeMention] My3Attribute +# 113| 0: [IntLiteral] 8 +#-----| 2: (Parameters) +# 110| 0: [Parameter] x +# 114| 4: [BlockStmt] {...} +# 114| 0: [ReturnStmt] return ...; +# 114| 0: [AddExpr] ... + ... +# 114| 0: [ParameterAccess] access to parameter x +# 114| 1: [IntLiteral] 1 +# 118| 4: [Setter] set_Item +#-----| 0: (Attributes) +# 116| 1: [DefaultAttribute] [My3(...)] +# 116| -1: [TypeMention] My3Attribute +# 116| 0: [IntLiteral] 9 +#-----| 2: (Parameters) +# 110| 0: [Parameter] x +# 118| 1: [Parameter] value +#-----| 0: (Attributes) +# 117| 1: [DefaultAttribute] [My3(...)] +# 117| -1: [TypeMention] My3Attribute +# 117| 0: [IntLiteral] 10 +# 118| 4: [BlockStmt] {...} +# 118| 0: [ReturnStmt] return ...; +# 121| 7: [Field] p +# 121| -1: [TypeMention] int +# 122| 8: [Property] Prop1 +# 122| -1: [TypeMention] int +# 126| 3: [Getter] get_Prop1 +#-----| 0: (Attributes) +# 124| 1: [DefaultAttribute] [My3(...)] +# 124| -1: [TypeMention] My3Attribute +# 124| 0: [IntLiteral] 11 +# 125| 2: [ReturnAttribute] [return: My3(...)] +# 125| -1: [TypeMention] My3Attribute +# 125| 0: [IntLiteral] 12 +# 126| 4: [BlockStmt] {...} +# 126| 0: [ReturnStmt] return ...; +# 126| 0: [FieldAccess] access to field p +# 130| 4: [Setter] set_Prop1 +#-----| 0: (Attributes) +# 128| 1: [DefaultAttribute] [My3(...)] +# 128| -1: [TypeMention] My3Attribute +# 128| 0: [IntLiteral] 13 +#-----| 2: (Parameters) +# 130| 0: [Parameter] value +#-----| 0: (Attributes) +# 129| 1: [DefaultAttribute] [My3(...)] +# 129| -1: [TypeMention] My3Attribute +# 129| 0: [IntLiteral] 14 +# 130| 4: [BlockStmt] {...} +# 130| 0: [ExprStmt] ...; +# 130| 0: [AssignExpr] ... = ... +# 130| 0: [FieldAccess] access to field p +# 130| 1: [ParameterAccess] access to parameter value diff --git a/csharp/ql/test/library-tests/attributes/attributes.cs b/csharp/ql/test/library-tests/attributes/attributes.cs index 7f03eb9c941..6790d7ff02d 100644 --- a/csharp/ql/test/library-tests/attributes/attributes.cs +++ b/csharp/ql/test/library-tests/attributes/attributes.cs @@ -86,4 +86,47 @@ class My2Attribute : Attribute { public int X { get; set; } public My2Attribute(bool a, bool b, int i = 12, int j = 13) { } +} + +class My3Attribute : Attribute +{ + public My3Attribute(int x) { } +} + +[My3Attribute(1)] +[return: My3Attribute(2)] +delegate int My1Delegate(string message); + +[return: My3Attribute(3)] +[type: My3Attribute(4)] +delegate string My2Delegate(string message); + +public class MyAttributeUsage +{ + [My3Attribute(5)] + [return: My3Attribute(6)] + public static int operator +(MyAttributeUsage a, MyAttributeUsage b) => 0; + + public int this[int x] + { + [My3Attribute(7)] + [return: My3Attribute(8)] + get { return x + 1; } + + [method: My3Attribute(9)] + [param: My3Attribute(10)] + set { return; } + } + + private int p; + public int Prop1 + { + [method: My3Attribute(11)] + [return: My3Attribute(12)] + get { return p; } + + [My3Attribute(13)] + [param: My3Attribute(14)] + set { p = value; } + } } \ No newline at end of file diff --git a/csharp/ql/test/library-tests/cil/attributes/attribute.expected b/csharp/ql/test/library-tests/cil/attributes/attribute.expected index 7ced55cab61..8c2a9d89762 100644 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.expected +++ b/csharp/ql/test/library-tests/cil/attributes/attribute.expected @@ -2,18 +2,22 @@ attrNoArg | !0 System.ReadOnlySpan`1.Enumerator.Current | [IsReadOnlyAttribute(...)] | | !0 System.ReadOnlySpan`1.Item | [IsReadOnlyAttribute(...)] | | | [CompilerGeneratedAttribute(...)] | -| Internal.Runtime.InteropServices.ComponentActivator.<>c__DisplayClass7_0 | [CompilerGeneratedAttribute(...)] | +| Internal.Runtime.InteropServices.ComponentActivator.<>c__DisplayClass13_0 | [CompilerGeneratedAttribute(...)] | +| Internal.Runtime.InteropServices.ComponentActivator.k__BackingField | [CompilerGeneratedAttribute(...)] | | Interop.HostPolicy.corehost_error_writer_fn | [UnmanagedFunctionPointerAttribute(...)] | | Interop.HostPolicy.corehost_resolve_component_dependencies_result_fn | [UnmanagedFunctionPointerAttribute(...)] | | Interop.PollEvents | [FlagsAttribute(...)] | -| Interop.Sys.<>c__DisplayClass37_0 | [CompilerGeneratedAttribute(...)] | +| Interop.Sys.<>c__DisplayClass67_0 | [CompilerGeneratedAttribute(...)] | | Interop.Sys.FileStatusFlags | [FlagsAttribute(...)] | | Interop.Sys.OpenFlags | [FlagsAttribute(...)] | +| Interop.Sys.Permissions | [FlagsAttribute(...)] | | InteropErrorExtensions | [ExtensionAttribute(...)] | | Microsoft.CodeAnalysis.EmbeddedAttribute | [CompilerGeneratedAttribute(...)] | | Microsoft.CodeAnalysis.EmbeddedAttribute | [EmbeddedAttribute(...)] | | Microsoft.Win32.SafeHandles.SafeFileHandle.<>c | [CompilerGeneratedAttribute(...)] | +| Microsoft.Win32.SafeHandles.SafeFileHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | | Microsoft.Win32.SafeHandles.SafeFileHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| Microsoft.Win32.SafeHandles.SafeFileHandle.ThreadPoolValueTaskSource.<>c | [CompilerGeneratedAttribute(...)] | | Microsoft.Win32.SafeHandles.SafeFileHandle.t_lastCloseErrorInfo | [ThreadStaticAttribute(...)] | | System.AppContext.FirstChanceException | [CompilerGeneratedAttribute(...)] | | System.AppContext.ProcessExit | [CompilerGeneratedAttribute(...)] | @@ -27,6 +31,7 @@ attrNoArg | System.ArgIterator | [IsByRefLikeAttribute(...)] | | System.Array.SorterGenericArray | [IsReadOnlyAttribute(...)] | | System.Array.SorterObjectArray | [IsReadOnlyAttribute(...)] | +| System.ArrayEnumerator._index | [NativeIntegerAttribute(...)] | | System.ArraySegment`1 | [IsReadOnlyAttribute(...)] | | System.ArraySegment`1.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.AssemblyLoadEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -36,10 +41,23 @@ attrNoArg | System.BitConverter.IsLittleEndian | [IntrinsicAttribute(...)] | | System.Buffers.StandardFormat | [IsReadOnlyAttribute(...)] | | System.Buffers.Text.Utf8Parser.ParseNumberOptions | [FlagsAttribute(...)] | +| System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1.<>c | [CompilerGeneratedAttribute(...)] | | System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1.t_tlsBuckets | [ThreadStaticAttribute(...)] | | System.ByReference`1 | [IsByRefLikeAttribute(...)] | | System.ByReference`1 | [IsReadOnlyAttribute(...)] | | System.ByReference`1 | [NonVersionableAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__22 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__36 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__37 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__38 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__39 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__40 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__58 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__59 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__60 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__61 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__62 | [CompilerGeneratedAttribute(...)] | +| System.CodeDom.Compiler.IndentedTextWriter.d__63 | [CompilerGeneratedAttribute(...)] | | System.Collections.Concurrent.ConcurrentQueue`1.d__26 | [CompilerGeneratedAttribute(...)] | | System.Collections.Generic.BitHelper | [IsByRefLikeAttribute(...)] | | System.Collections.Generic.Comparer`1.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -52,11 +70,12 @@ attrNoArg | System.ConsoleKeyInfo | [IsReadOnlyAttribute(...)] | | System.ConsoleModifiers | [FlagsAttribute(...)] | | System.ConsolePal.<>c | [CompilerGeneratedAttribute(...)] | -| System.ConsolePal.<>c__DisplayClass112_0 | [CompilerGeneratedAttribute(...)] | -| System.ConsolePal.ControlCHandlerRegistrar.<>c | [CompilerGeneratedAttribute(...)] | +| System.ConsolePal.<>c__DisplayClass113_0 | [CompilerGeneratedAttribute(...)] | | System.ConsolePal.TerminalFormatStrings.<>c | [CompilerGeneratedAttribute(...)] | | System.Convert | [ExtensionAttribute(...)] | | System.DTSubString | [IsByRefLikeAttribute(...)] | +| System.DateOnly | [IsReadOnlyAttribute(...)] | +| System.DateOnly.<>c | [CompilerGeneratedAttribute(...)] | | System.DateTime | [IsReadOnlyAttribute(...)] | | System.DateTimeOffset | [IsReadOnlyAttribute(...)] | | System.DateTimeResult | [IsByRefLikeAttribute(...)] | @@ -77,6 +96,8 @@ attrNoArg | System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.CodeAnalysis.SuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -92,6 +113,8 @@ attrNoArg | System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.ConditionalAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | +| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | | System.Diagnostics.Debug.t_indentLevel | [ThreadStaticAttribute(...)] | | System.Diagnostics.DebuggableAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.DebuggableAttribute.DebuggingModes | [FlagsAttribute(...)] | @@ -106,8 +129,8 @@ attrNoArg | System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.DebuggerVisualizerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Diagnostics.StackFrameExtensions | [ExtensionAttribute(...)] | | System.Diagnostics.StackFrameHelper.t_reentrancy | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.CounterGroup.<>c__DisplayClass21_0 | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.CounterPayload | [EventDataAttribute(...)] | | System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.CounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -160,7 +183,6 @@ attrNoArg | System.Diagnostics.Tracing.EventProvider.s_returnCode | [ThreadStaticAttribute(...)] | | System.Diagnostics.Tracing.EventSource.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.EventSource.m_EventSourceExceptionRecurenceCount | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.EventSource.m_EventSourceInDecodeObject | [ThreadStaticAttribute(...)] | | System.Diagnostics.Tracing.EventSourceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.EventSourceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.EventSourceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -168,8 +190,8 @@ attrNoArg | System.Diagnostics.Tracing.EventSourceSettings | [FlagsAttribute(...)] | | System.Diagnostics.Tracing.EventTags | [FlagsAttribute(...)] | | System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.EventWrittenEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.IncrementingCounterPayload | [EventDataAttribute(...)] | | System.Diagnostics.Tracing.IncrementingCounterPayload.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -216,12 +238,8 @@ attrNoArg | System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass0_19 | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.PropertyValue.ReferenceTypeHelper`1.<>c__DisplayClass0_20 | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.RuntimeEventSource.<>c | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.ScalarArrayTypeInfo.<>c | [CompilerGeneratedAttribute(...)] | -| System.Diagnostics.Tracing.ScalarTypeInfo.<>c | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.TraceLoggingMetadataCollector.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Diagnostics.Tracing.TraceLoggingTypeInfo.threadCache | [ThreadStaticAttribute(...)] | -| System.Diagnostics.Tracing.XplatEventLogger.<>c | [CompilerGeneratedAttribute(...)] | -| System.Environment.<>c | [CompilerGeneratedAttribute(...)] | | System.Environment.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Exception.DispatchState | [IsReadOnlyAttribute(...)] | | System.GCGenerationInfo | [IsReadOnlyAttribute(...)] | @@ -239,7 +257,9 @@ attrNoArg | System.Globalization.DateTimeStyles | [FlagsAttribute(...)] | | System.Globalization.DaylightTimeStruct | [IsReadOnlyAttribute(...)] | | System.Globalization.GlobalizationExtensions | [ExtensionAttribute(...)] | -| System.Globalization.GlobalizationMode.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Globalization.GlobalizationMode.Settings.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Globalization.GlobalizationMode.Settings.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Globalization.InvariantModeCasing.<>c | [CompilerGeneratedAttribute(...)] | | System.Globalization.MonthNameStyles | [FlagsAttribute(...)] | | System.Globalization.NumberStyles | [FlagsAttribute(...)] | | System.Globalization.OrdinalCasing | [ExtensionAttribute(...)] | @@ -252,16 +272,48 @@ attrNoArg | System.Globalization.TimeSpanParse.TimeSpanToken | [IsByRefLikeAttribute(...)] | | System.Globalization.TimeSpanParse.TimeSpanTokenizer | [IsByRefLikeAttribute(...)] | | System.Globalization.TimeSpanStyles | [FlagsAttribute(...)] | +| System.Guid | [IsReadOnlyAttribute(...)] | | System.Guid | [NonVersionableAttribute(...)] | | System.Half | [IsReadOnlyAttribute(...)] | | System.HexConverter.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__70 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__35 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__38 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__42 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__51 | [CompilerGeneratedAttribute(...)] | -| System.IO.BufferedStream.d__62 | [CompilerGeneratedAttribute(...)] | +| System.IO.BufferedStream.d__69 | [CompilerGeneratedAttribute(...)] | +| System.IO.BufferedStream.d__33 | [CompilerGeneratedAttribute(...)] | +| System.IO.BufferedStream.d__36 | [CompilerGeneratedAttribute(...)] | +| System.IO.BufferedStream.d__40 | [CompilerGeneratedAttribute(...)] | +| System.IO.BufferedStream.d__49 | [CompilerGeneratedAttribute(...)] | +| System.IO.BufferedStream.d__60 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEntry | [IsByRefLikeAttribute(...)] | +| System.IO.Enumeration.FileSystemEntry.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEntry.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEntry.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEntry.<_fileNameBuffer>e__FixedBuffer | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEntry.<_fileNameBuffer>e__FixedBuffer | [UnsafeValueTypeAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass3_0 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass4_0 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass5_0 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass6_0 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass7_0 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass8_0 | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerable`1.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.Enumeration.FileSystemEnumerable`1.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.EnumerationOptions.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.File.<g__Core\|72_0>d | [CompilerGeneratedAttribute(...)] | +| System.IO.File.d__70 | [CompilerGeneratedAttribute(...)] | +| System.IO.File.d__71 | [CompilerGeneratedAttribute(...)] | +| System.IO.File.d__75 | [CompilerGeneratedAttribute(...)] | +| System.IO.File.d__66 | [CompilerGeneratedAttribute(...)] | +| System.IO.File.d__78 | [CompilerGeneratedAttribute(...)] | +| System.IO.File.d__79 | [CompilerGeneratedAttribute(...)] | | System.IO.FileAccess | [FlagsAttribute(...)] | | System.IO.FileAttributes | [FlagsAttribute(...)] | | System.IO.FileLoadException.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -270,22 +322,31 @@ attrNoArg | System.IO.FileNotFoundException.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.IO.FileOptions | [FlagsAttribute(...)] | | System.IO.FileShare | [FlagsAttribute(...)] | -| System.IO.FileStream.<>c | [CompilerGeneratedAttribute(...)] | +| System.IO.FileStatus.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.IO.Path.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.<g__FinishReadAsync\|46_0>d | [CompilerGeneratedAttribute(...)] | +| System.IO.Path.Join3Payload | [IsReadOnlyAttribute(...)] | +| System.IO.Path.Join4Payload | [IsReadOnlyAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__59 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__28 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__57 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__39 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__38 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__50 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.BufferedFileStreamStrategy.d__49 | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.FileStreamHelpers.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.IO.Strategies.Net5CompatFileStreamStrategy.<>c | [CompilerGeneratedAttribute(...)] | +| System.IO.Stream.<g__Core\|29_0>d | [CompilerGeneratedAttribute(...)] | +| System.IO.Stream.<g__FinishReadAsync\|44_0>d | [CompilerGeneratedAttribute(...)] | | System.IO.Stream.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.d__29 | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.d__59 | [CompilerGeneratedAttribute(...)] | -| System.IO.Stream.SynchronousAsyncResult.<>c | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__64 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__67 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__59 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamReader.d__61 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__33 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__74 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__61 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__63 | [CompilerGeneratedAttribute(...)] | -| System.IO.StreamWriter.d__66 | [CompilerGeneratedAttribute(...)] | +| System.IO.Stream.d__57 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamReader.d__68 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamReader.d__71 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamReader.d__63 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamReader.d__65 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamWriter.<g__Core\|76_0>d | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamWriter.d__37 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamWriter.d__65 | [CompilerGeneratedAttribute(...)] | +| System.IO.StreamWriter.d__69 | [CompilerGeneratedAttribute(...)] | | System.IO.TextReader.<>c | [CompilerGeneratedAttribute(...)] | | System.IO.TextReader.d__20 | [CompilerGeneratedAttribute(...)] | | System.IO.TextReader.d__14 | [CompilerGeneratedAttribute(...)] | @@ -294,12 +355,22 @@ attrNoArg | System.IO.TextWriter.<>c | [CompilerGeneratedAttribute(...)] | | System.Index | [IsReadOnlyAttribute(...)] | | System.IntPtr | [IsReadOnlyAttribute(...)] | +| System.IntPtr System.IntPtr.AdditiveIdentity | [NativeIntegerAttribute(...)] | +| System.IntPtr System.IntPtr.MaxValue | [NativeIntegerAttribute(...)] | +| System.IntPtr System.IntPtr.MinValue | [NativeIntegerAttribute(...)] | +| System.IntPtr System.IntPtr.MultiplicativeIdentity | [NativeIntegerAttribute(...)] | +| System.IntPtr System.IntPtr.NegativeOne | [NativeIntegerAttribute(...)] | +| System.IntPtr System.IntPtr.One | [NativeIntegerAttribute(...)] | +| System.IntPtr System.IntPtr.Zero | [NativeIntegerAttribute(...)] | +| System.IntPtr System.Runtime.InteropServices.CLong.Value | [NativeIntegerAttribute(...)] | | System.IntPtr.Zero | [IntrinsicAttribute(...)] | | System.LazyHelper.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.LocalDataStoreSlot.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Marvin.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.MdUtf8String | [IsReadOnlyAttribute(...)] | | System.MemoryExtensions | [ExtensionAttribute(...)] | +| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | +| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [IsByRefLikeAttribute(...)] | | System.Memory`1 | [IsReadOnlyAttribute(...)] | | System.Nullable`1 | [NonVersionableAttribute(...)] | | System.Number.BigInteger | [IsByRefLikeAttribute(...)] | @@ -324,6 +395,7 @@ attrNoArg | System.Numerics.Matrix4x4 | [IntrinsicAttribute(...)] | | System.Numerics.Plane | [IntrinsicAttribute(...)] | | System.Numerics.Quaternion | [IntrinsicAttribute(...)] | +| System.Numerics.Vector | [ExtensionAttribute(...)] | | System.Numerics.Vector | [IntrinsicAttribute(...)] | | System.Numerics.Vector2 | [IntrinsicAttribute(...)] | | System.Numerics.Vector3 | [IntrinsicAttribute(...)] | @@ -336,7 +408,8 @@ attrNoArg | System.ParamsArray | [IsReadOnlyAttribute(...)] | | System.ParseFlags | [FlagsAttribute(...)] | | System.Progress`1.ProgressChanged | [CompilerGeneratedAttribute(...)] | -| System.Random.t_threadRandom | [ThreadStaticAttribute(...)] | +| System.Random.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Random.ThreadSafeRandom.t_random | [ThreadStaticAttribute(...)] | | System.Range | [IsReadOnlyAttribute(...)] | | System.Range.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Range.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -381,17 +454,9 @@ attrNoArg | System.Reflection.DefaultMemberAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.Emit.AssemblyBuilderAccess | [FlagsAttribute(...)] | | System.Reflection.Emit.DynamicResolver.SecurityControlFlags | [FlagsAttribute(...)] | -| System.Reflection.Emit.EventToken.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.Emit.ExceptionHandler | [IsReadOnlyAttribute(...)] | -| System.Reflection.Emit.FieldToken.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.Emit.Label | [IsReadOnlyAttribute(...)] | -| System.Reflection.Emit.MethodToken.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.Emit.OpCode | [IsReadOnlyAttribute(...)] | -| System.Reflection.Emit.ParameterToken.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Emit.PropertyToken.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Emit.SignatureToken.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Emit.StringToken.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Reflection.Emit.TypeToken.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.EventAttributes | [FlagsAttribute(...)] | | System.Reflection.ExceptionHandlingClauseOptions | [FlagsAttribute(...)] | | System.Reflection.FieldAttributes | [FlagsAttribute(...)] | @@ -404,12 +469,21 @@ attrNoArg | System.Reflection.MdSigCallingConvention | [FlagsAttribute(...)] | | System.Reflection.MemberTypes | [FlagsAttribute(...)] | | System.Reflection.Metadata.AssemblyExtensions | [ExtensionAttribute(...)] | +| System.Reflection.Metadata.MetadataUpdateHandlerAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.Metadata.MetadataUpdater.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.MetadataEnumResult.e__FixedBuffer | [CompilerGeneratedAttribute(...)] | | System.Reflection.MetadataEnumResult.e__FixedBuffer | [UnsafeValueTypeAttribute(...)] | | System.Reflection.MetadataImport | [IsReadOnlyAttribute(...)] | | System.Reflection.MethodAttributes | [FlagsAttribute(...)] | | System.Reflection.MethodSemanticsAttributes | [FlagsAttribute(...)] | | System.Reflection.Module.<>c | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfoContext.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Reflection.NullabilityInfoContext.NotAnnotatedStatus | [FlagsAttribute(...)] | | System.Reflection.ObfuscateAssemblyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.ObfuscateAssemblyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Reflection.ObfuscationAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -436,8 +510,11 @@ attrNoArg | System.Resources.NeutralResourcesLanguageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Resources.NeutralResourcesLanguageAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Resources.ResourceFallbackManager.d__5 | [CompilerGeneratedAttribute(...)] | -| System.Resources.ResourceReader.<>c | [CompilerGeneratedAttribute(...)] | +| System.Resources.ResourceLocator | [IsReadOnlyAttribute(...)] | +| System.Resources.ResourceLocator.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Resources.ResourceLocator.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Resources.ResourceReader.<>c__DisplayClass7_0`1 | [CompilerGeneratedAttribute(...)] | +| System.Resources.ResourceReader.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Resources.SatelliteContractVersionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.AssemblyTargetedPatchBandAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.AccessedThroughPropertyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -461,12 +538,15 @@ attrNoArg | System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter | [IsReadOnlyAttribute(...)] | | System.Runtime.CompilerServices.ContractHelper.InternalContractFailed | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.DefaultDependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | +| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [IsByRefLikeAttribute(...)] | | System.Runtime.CompilerServices.DependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.DependencyAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.FixedBufferAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.FixedBufferAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.InternalsVisibleToAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.InternalsVisibleToAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.IsUnmanagedAttribute | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.IsUnmanagedAttribute | [EmbeddedAttribute(...)] | | System.Runtime.CompilerServices.MethodImplAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -480,6 +560,7 @@ attrNoArg | System.Runtime.CompilerServices.NullablePublicOnlyAttribute | [CompilerGeneratedAttribute(...)] | | System.Runtime.CompilerServices.NullablePublicOnlyAttribute | [EmbeddedAttribute(...)] | | System.Runtime.CompilerServices.ObjectHandleOnStack | [IsByRefLikeAttribute(...)] | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.StateMachineBox`1.t_tlsCache | [ThreadStaticAttribute(...)] | | System.Runtime.CompilerServices.QCallAssembly | [IsByRefLikeAttribute(...)] | | System.Runtime.CompilerServices.QCallModule | [IsByRefLikeAttribute(...)] | | System.Runtime.CompilerServices.QCallTypeHandle | [IsByRefLikeAttribute(...)] | @@ -505,8 +586,13 @@ attrNoArg | System.Runtime.ConstrainedExecution.ReliabilityContractAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.ConstrainedExecution.ReliabilityContractAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.ArrayWithOffset | [IsReadOnlyAttribute(...)] | | System.Runtime.InteropServices.BStrWrapper.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.BestFitMappingAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.CLong | [IntrinsicAttribute(...)] | +| System.Runtime.InteropServices.CLong | [IsReadOnlyAttribute(...)] | +| System.Runtime.InteropServices.CULong | [IntrinsicAttribute(...)] | +| System.Runtime.InteropServices.CULong | [IsReadOnlyAttribute(...)] | | System.Runtime.InteropServices.ClassInterfaceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.CoClassAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.ComDefaultInterfaceAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -540,7 +626,14 @@ attrNoArg | System.Runtime.InteropServices.LCIDConversionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.Marshal.<>c | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.MarshalAsAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Runtime.InteropServices.MemoryMarshal.d__15`1 | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.MemoryMarshal.d__18`1 | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.NFloat | [IntrinsicAttribute(...)] | +| System.Runtime.InteropServices.NFloat | [IsReadOnlyAttribute(...)] | +| System.Runtime.InteropServices.PosixSignalContext.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.PosixSignalContext.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.PosixSignalRegistration.Token.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.PosixSignalRegistration.Token.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.InteropServices.PosixSignalRegistration.Token.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.ProgIdAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.InteropServices.SafeBuffer._numBytes | [NativeIntegerAttribute(...)] | | System.Runtime.InteropServices.StructLayoutAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -569,6 +662,8 @@ attrNoArg | System.Runtime.Intrinsics.X86.Avx2 | [IntrinsicAttribute(...)] | | System.Runtime.Intrinsics.X86.Avx2.X64 | [IntrinsicAttribute(...)] | | System.Runtime.Intrinsics.X86.Avx.X64 | [IntrinsicAttribute(...)] | +| System.Runtime.Intrinsics.X86.AvxVnni | [IntrinsicAttribute(...)] | +| System.Runtime.Intrinsics.X86.AvxVnni.X64 | [IntrinsicAttribute(...)] | | System.Runtime.Intrinsics.X86.Bmi1 | [IntrinsicAttribute(...)] | | System.Runtime.Intrinsics.X86.Bmi1.X64 | [IntrinsicAttribute(...)] | | System.Runtime.Intrinsics.X86.Bmi2 | [IntrinsicAttribute(...)] | @@ -596,8 +691,8 @@ attrNoArg | System.Runtime.Intrinsics.X86.X86Base | [IntrinsicAttribute(...)] | | System.Runtime.Intrinsics.X86.X86Base.X64 | [IntrinsicAttribute(...)] | | System.Runtime.Loader.AssemblyDependencyResolver.<>c__DisplayClass6_0 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.d__83 | [CompilerGeneratedAttribute(...)] | -| System.Runtime.Loader.AssemblyLoadContext.d__53 | [CompilerGeneratedAttribute(...)] | +| System.Runtime.Loader.AssemblyLoadContext.d__85 | [CompilerGeneratedAttribute(...)] | +| System.Runtime.Loader.AssemblyLoadContext.d__55 | [CompilerGeneratedAttribute(...)] | | System.Runtime.Loader.AssemblyLoadContext.AssemblyLoad | [CompilerGeneratedAttribute(...)] | | System.Runtime.Loader.AssemblyLoadContext.AssemblyResolve | [CompilerGeneratedAttribute(...)] | | System.Runtime.Loader.AssemblyLoadContext.ResourceResolve | [CompilerGeneratedAttribute(...)] | @@ -613,19 +708,25 @@ attrNoArg | System.Runtime.Serialization.SerializationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Serialization.SerializationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Serialization.SerializationInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.Serialization.SerializationInfo.t_deserializationTracker | [ThreadStaticAttribute(...)] | | System.Runtime.Serialization.StreamingContext | [IsReadOnlyAttribute(...)] | | System.Runtime.Serialization.StreamingContextStates | [FlagsAttribute(...)] | | System.Runtime.TargetedPatchingOptOutAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Versioning.ComponentGuaranteesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Versioning.ComponentGuaranteesOptions | [FlagsAttribute(...)] | | System.Runtime.Versioning.OSPlatformAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Versioning.ResourceConsumptionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Versioning.ResourceConsumptionAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Versioning.ResourceExposureAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Runtime.Versioning.ResourceScope | [FlagsAttribute(...)] | | System.Runtime.Versioning.SxSRequirements | [FlagsAttribute(...)] | | System.RuntimeArgumentHandle | [IsByRefLikeAttribute(...)] | +| System.RuntimeFieldHandle | [NonVersionableAttribute(...)] | +| System.RuntimeMethodHandle | [NonVersionableAttribute(...)] | | System.RuntimeType.RuntimeTypeCache.Filter | [IsReadOnlyAttribute(...)] | +| System.RuntimeTypeHandle | [NonVersionableAttribute(...)] | | System.Security.AllowPartiallyTrustedCallersAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Security.Permissions.SecurityAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Security.Permissions.SecurityAttribute.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -667,6 +768,7 @@ attrNoArg | System.Span`1.Enumerator | [IsByRefLikeAttribute(...)] | | System.StringNormalizationExtensions | [ExtensionAttribute(...)] | | System.StringSplitOptions | [FlagsAttribute(...)] | +| System.StubHelpers.StubHelpers.s_pendingExceptionObject | [ThreadStaticAttribute(...)] | | System.TermInfo.ParameterizedStrings.FormatParam | [IsReadOnlyAttribute(...)] | | System.TermInfo.ParameterizedStrings.t_cachedOneElementArgsArray | [ThreadStaticAttribute(...)] | | System.TermInfo.ParameterizedStrings.t_cachedStack | [ThreadStaticAttribute(...)] | @@ -684,9 +786,10 @@ attrNoArg | System.Text.EncodingInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Text.Latin1Encoding.<>c | [CompilerGeneratedAttribute(...)] | | System.Text.Rune | [IsReadOnlyAttribute(...)] | +| System.Text.SpanLineEnumerator | [IsByRefLikeAttribute(...)] | | System.Text.SpanRuneEnumerator | [IsByRefLikeAttribute(...)] | +| System.Text.StringBuilder.AppendInterpolatedStringHandler | [InterpolatedStringHandlerAttribute(...)] | | System.Text.StringBuilderCache.t_cachedInstance | [ThreadStaticAttribute(...)] | -| System.Text.StringOrCharArray | [IsReadOnlyAttribute(...)] | | System.Text.TranscodingStream.<g__DisposeAsyncCore\|30_0>d | [CompilerGeneratedAttribute(...)] | | System.Text.TranscodingStream.<g__ReadAsyncCore\|41_0>d | [CompilerGeneratedAttribute(...)] | | System.Text.TranscodingStream.<g__WriteAsyncCore\|50_0>d | [CompilerGeneratedAttribute(...)] | @@ -695,6 +798,7 @@ attrNoArg | System.Text.Unicode.TextSegmentationUtility.Processor`1.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Text.Unicode.TextSegmentationUtility.Processor`1.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Text.ValueStringBuilder | [IsByRefLikeAttribute(...)] | +| System.Text.ValueUtf8Converter | [IsByRefLikeAttribute(...)] | | System.Threading.AsyncLocalValueChangedArgs`1 | [IsReadOnlyAttribute(...)] | | System.Threading.AsyncLocalValueChangedArgs`1.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Threading.AsyncLocalValueChangedArgs`1.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -706,15 +810,33 @@ attrNoArg | System.Threading.CancellationTokenSource.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.CancellationTokenSource.CallbackNode.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.CancellationTokenSource.LinkedNCancellationTokenSource.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.CancellationTokenSource.Registrations.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.PeriodicTimer.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.PeriodicTimer.State.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.PortableThreadPool.HillClimbing.Complex.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.PortableThreadPool.HillClimbing.Complex.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.PortableThreadPool.WaitThreadNode.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.PortableThreadPool.WaitThreadNode.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.PortableThreadPool.WorkerThread.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.PortableThreadPool.t_completionCountObject | [ThreadStaticAttribute(...)] | | System.Threading.ProcessorIdCache.t_currentProcessorIdCache | [ThreadStaticAttribute(...)] | | System.Threading.QueueUserWorkItemCallback.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.ReaderWriterLockSlim.WaiterStates | [FlagsAttribute(...)] | | System.Threading.ReaderWriterLockSlim.t_rwc | [ThreadStaticAttribute(...)] | -| System.Threading.SemaphoreSlim.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.SemaphoreSlim.d__33 | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.RegisteredWaitHandle.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.SemaphoreSlim.d__31 | [CompilerGeneratedAttribute(...)] | +| System.Threading.SemaphoreSlim.ConfiguredNoThrowAwaiter`1 | [IsReadOnlyAttribute(...)] | | System.Threading.SynchronizationContext.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.AwaitTaskContinuation.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ConcurrentExclusiveTaskScheduler.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.ConcurrentExclusiveSchedulerPair.ProcessingMode | [FlagsAttribute(...)] | | System.Threading.Tasks.GenericDelegateCache`2.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.InternalTaskOptions | [FlagsAttribute(...)] | @@ -727,8 +849,9 @@ attrNoArg | System.Threading.Tasks.SynchronizationContextTaskScheduler.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.Task.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.Task.k__BackingField | [CompilerGeneratedAttribute(...)] | -| System.Threading.Tasks.Task.DelayPromise.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.Tasks.Task.CancellationPromise`1.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.Task.DelayPromiseWithCancellation.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.Tasks.Task.TaskStateFlags | [FlagsAttribute(...)] | | System.Threading.Tasks.Task.t_currentTask | [ThreadStaticAttribute(...)] | | System.Threading.Tasks.TaskAsyncEnumerableExtensions | [ExtensionAttribute(...)] | | System.Threading.Tasks.TaskContinuationOptions | [FlagsAttribute(...)] | @@ -740,6 +863,8 @@ attrNoArg | System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass38_0`1 | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass41_0`2 | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.TaskFactory`1.<>c__DisplayClass44_0`3 | [CompilerGeneratedAttribute(...)] | +| System.Threading.Tasks.TaskScheduler.TaskSchedulerAwaiter | [IsReadOnlyAttribute(...)] | +| System.Threading.Tasks.TaskScheduler.TaskSchedulerAwaiter.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.TaskScheduler.UnobservedTaskException | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.TaskSchedulerAwaitTaskContinuation.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.TaskToApm.TaskAsyncResult.k__BackingField | [CompilerGeneratedAttribute(...)] | @@ -752,24 +877,32 @@ attrNoArg | System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.Tasks.ValueTask`1 | [IsReadOnlyAttribute(...)] | | System.Threading.Tasks.ValueTask`1.ValueTaskSourceAsTask.<>c | [CompilerGeneratedAttribute(...)] | +| System.Threading.Thread.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Threading.Thread.t_currentThread | [ThreadStaticAttribute(...)] | | System.Threading.ThreadHandle | [IsReadOnlyAttribute(...)] | +| System.Threading.ThreadInt64PersistentCounter.t_nodeFinalizationHelpers | [ThreadStaticAttribute(...)] | | System.Threading.ThreadLocal`1.ts_finalizationHelper | [ThreadStaticAttribute(...)] | | System.Threading.ThreadLocal`1.ts_slotArray | [ThreadStaticAttribute(...)] | | System.Threading.ThreadPool.<>c | [CompilerGeneratedAttribute(...)] | -| System.Threading.ThreadPool.d__52 | [CompilerGeneratedAttribute(...)] | -| System.Threading.ThreadPool.d__51 | [CompilerGeneratedAttribute(...)] | +| System.Threading.ThreadPool.d__79 | [CompilerGeneratedAttribute(...)] | +| System.Threading.ThreadPool.d__78 | [CompilerGeneratedAttribute(...)] | +| System.Threading.ThreadPool.d__77 | [CompilerGeneratedAttribute(...)] | | System.Threading.ThreadPoolWorkQueueThreadLocals.threadLocals | [ThreadStaticAttribute(...)] | | System.Threading.ThreadState | [FlagsAttribute(...)] | +| System.Threading.Timer.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.TimerQueue.k__BackingField | [CompilerGeneratedAttribute(...)] | +| System.Threading.TimerQueue.d__16 | [CompilerGeneratedAttribute(...)] | | System.Threading.TimerQueue.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.Threading.TimerQueueTimer.<>c | [CompilerGeneratedAttribute(...)] | | System.Threading.WaitHandle.t_safeWaitHandlesForRent | [ThreadStaticAttribute(...)] | | System.Threading.WaitHandleExtensions | [ExtensionAttribute(...)] | | System.ThrowHelper | [StackTraceHiddenAttribute(...)] | +| System.TimeOnly | [IsReadOnlyAttribute(...)] | +| System.TimeOnly.<>c | [CompilerGeneratedAttribute(...)] | | System.TimeSpan | [IsReadOnlyAttribute(...)] | | System.TimeZoneInfo.<>c | [CompilerGeneratedAttribute(...)] | -| System.TimeZoneInfo.<>c__DisplayClass124_0 | [CompilerGeneratedAttribute(...)] | +| System.TimeZoneInfo.<>c__DisplayClass171_0 | [CompilerGeneratedAttribute(...)] | +| System.TimeZoneInfo.k__BackingField | [CompilerGeneratedAttribute(...)] | | System.TimeZoneInfo.TransitionTime | [IsReadOnlyAttribute(...)] | | System.TimeZoneInfoOptions | [FlagsAttribute(...)] | | System.TupleExtensions | [ExtensionAttribute(...)] | @@ -777,7 +910,15 @@ attrNoArg | System.TypedReference | [IsByRefLikeAttribute(...)] | | System.TypedReference | [NonVersionableAttribute(...)] | | System.UIntPtr | [IsReadOnlyAttribute(...)] | +| System.UIntPtr System.Array.NativeLength | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.Runtime.InteropServices.CULong.Value | [NativeIntegerAttribute(...)] | | System.UIntPtr System.Runtime.InteropServices.SafeBuffer.Uninitialized | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.UIntPtr.AdditiveIdentity | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.UIntPtr.MaxValue | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.UIntPtr.MinValue | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.UIntPtr.MultiplicativeIdentity | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.UIntPtr.One | [NativeIntegerAttribute(...)] | +| System.UIntPtr System.UIntPtr.Zero | [NativeIntegerAttribute(...)] | | System.UIntPtr.Zero | [IntrinsicAttribute(...)] | | System.__DTString | [IsByRefLikeAttribute(...)] | | bool | [IsReadOnlyAttribute(...)] | @@ -807,6 +948,12 @@ attrArgNamed | System.CodeDom.Compiler.GeneratedCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Collections.KeyValuePairs | [DebuggerDisplayAttribute(...)] | Name | [{_key}] | | System.ContextStaticAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.DateOnly System.DateOnly.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.DateOnly System.DateOnly.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.DateTime System.DateTime.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.DateTime System.DateTime.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.DateTimeOffset System.DateTimeOffset.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.DateTimeOffset System.DateTimeOffset.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | | System.Diagnostics.CodeAnalysis.AllowNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Diagnostics.CodeAnalysis.DisallowNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute | [AttributeUsageAttribute(...)] | Inherited | False | @@ -826,6 +973,8 @@ attrArgNamed | System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Diagnostics.CodeAnalysis.NotNullWhenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [AttributeUsageAttribute(...)] | Inherited | False | @@ -857,15 +1006,66 @@ attrArgNamed | System.Diagnostics.DebuggerVisualizerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Diagnostics.StackTraceHiddenAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Diagnostics.Tracing.EventDataAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Diagnostics.Tracing.EventSource | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves methods on Delegate and MulticastDelegate because the nested type OverrideEventProvider's base type EventProvider defines a delegate. This includes Delegate and MulticastDelegate methods which have dynamically accessed members requirements, but EnsureDescriptorsInitialized does not access these members and is safe to call. | +| System.Diagnostics.Tracing.EventSource | [UnconditionalSuppressMessageAttribute(...)] | Justification | EnsureDescriptorsInitialized's use of GetType preserves methods on Delegate and MulticastDelegate because the nested type OverrideEventProvider's base type EventProvider defines a delegate. This includes Delegate and MulticastDelegate methods which require unreferenced code, but EnsureDescriptorsInitialized does not access these members and is safe to call. | | System.Diagnostics.Tracing.FrameworkEventSource | [EventSourceAttribute(...)] | Guid | 8E9F5090-2D75-4d03-8A81-E5AFBF85DAF1 | | System.Diagnostics.Tracing.FrameworkEventSource | [EventSourceAttribute(...)] | Name | System.Diagnostics.Eventing.FrameworkEventSource | -| System.Diagnostics.Tracing.NativeRuntimeEventSource | [EventSourceAttribute(...)] | Guid | 5E5BB766-BBFC-5662-0548-1D44FAD9BB56 | +| System.Diagnostics.Tracing.NativeRuntimeEventSource | [EventSourceAttribute(...)] | Guid | E13C0D23-CCBC-4E12-931B-D9CC2EEE27E4 | | System.Diagnostics.Tracing.NativeRuntimeEventSource | [EventSourceAttribute(...)] | Name | Microsoft-Windows-DotNETRuntime | | System.Diagnostics.Tracing.RuntimeEventSource | [EventSourceAttribute(...)] | Guid | 49592C0F-5A05-516D-AA4B-A64E02026C89 | | System.Diagnostics.Tracing.RuntimeEventSource | [EventSourceAttribute(...)] | Name | System.Runtime | +| System.Exception.SerializeObjectState | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0011 | +| System.Exception.SerializeObjectState | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | System.FlagsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Globalization.CompareInfo.m_SortVersion | [OptionalFieldAttribute(...)] | VersionAdded | 3 | | System.Globalization.CompareInfo.m_name | [OptionalFieldAttribute(...)] | VersionAdded | 2 | +| System.Half System.Half.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.E | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.Epsilon | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.NaN | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.NegativeInfinity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.NegativeZero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.Pi | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.PositiveInfinity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.Tau | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.Half System.Half.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IAdditionOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IAdditiveIdentity`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IBinaryFloatingPoint`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IBinaryInteger`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IBinaryNumber`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IBitwiseOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IComparisonOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IDecrementOperators`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IDivisionOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IEqualityOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IFloatingPoint`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IIncrementOperators`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IMinMaxValue`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IModulusOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IMultiplicativeIdentity`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IMultiplyOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.INumber`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IParseable`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IShiftOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.ISignedNumber`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.ISpanParseable`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.ISubtractionOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IUnaryNegationOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IUnaryPlusOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IUnsignedNumber`1 | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.IntPtr System.IntPtr.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | | System.NonSerializedAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.ObsoleteAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.ParamArrayAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | @@ -891,10 +1091,15 @@ attrArgNamed | System.Reflection.AssemblyTitleAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Reflection.AssemblyTrademarkAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Reflection.AssemblyVersionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Reflection.ObfuscateAssemblyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Reflection.ObfuscateAssemblyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Reflection.ObfuscationAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Reflection.ObfuscationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Reflection.StrongNameKeyPair | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0017 | +| System.Reflection.StrongNameKeyPair | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | +| System.Reflection.StrongNameKeyPair System.Reflection.AssemblyName.KeyPair | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0017 | +| System.Reflection.StrongNameKeyPair System.Reflection.AssemblyName.KeyPair | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | System.Resources.NeutralResourcesLanguageAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Resources.SatelliteContractVersionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.AssemblyTargetedPatchBandAttribute | [AttributeUsageAttribute(...)] | Inherited | False | @@ -910,17 +1115,24 @@ attrArgNamed | System.Runtime.CompilerServices.CallerLineNumberAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.CallerMemberNameAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.CompilerGeneratedAttribute | [AttributeUsageAttribute(...)] | Inherited | True | +| System.Runtime.CompilerServices.CreateNewOnMetadataUpdateAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.CompilerServices.CustomConstantAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.DateTimeConstantAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.DecimalConstantAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.DependencyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0015 | +| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | System.Runtime.CompilerServices.EnumeratorCancellationAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.FixedBufferAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.IndexerNameAttribute | [AttributeUsageAttribute(...)] | Inherited | True | | System.Runtime.CompilerServices.InternalsVisibleToAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Runtime.CompilerServices.InternalsVisibleToAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | +| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | +| System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.IntrinsicAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.IsReadOnlyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.IteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | @@ -940,10 +1152,13 @@ attrArgNamed | System.Runtime.CompilerServices.ReferenceAssemblyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.CompilerServices.RuntimeFeature.VirtualStaticsInInterfaces | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | | System.Runtime.CompilerServices.SkipLocalsInitAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.StateMachineAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.CompilerServices.StateMachineAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.StringFreezingAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.CompilerServices.SuppressIldasmAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0025 | +| System.Runtime.CompilerServices.SuppressIldasmAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | System.Runtime.CompilerServices.TypeDependencyAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Runtime.CompilerServices.TypeDependencyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.CompilerServices.TypeForwardedFromAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | @@ -962,6 +1177,8 @@ attrArgNamed | System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0032 | +| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | @@ -986,6 +1203,8 @@ attrArgNamed | System.Runtime.InteropServices.InterfaceTypeAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.LCIDConversionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.MarshalAsAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [AttributeUsageAttribute(...)] | Inherited | True | | System.Runtime.InteropServices.OptionalAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.OutAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.PreserveSigAttribute | [AttributeUsageAttribute(...)] | Inherited | False | @@ -994,6 +1213,8 @@ attrArgNamed | System.Runtime.InteropServices.SuppressGCTransitionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.TypeIdentifierAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.InteropServices.TypeIdentifierAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.InteropServices.UnmanagedCallConvAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | +| System.Runtime.InteropServices.UnmanagedCallConvAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute | [AttributeUsageAttribute(...)] | Inherited | False | @@ -1008,16 +1229,21 @@ attrArgNamed | System.Runtime.Versioning.ComponentGuaranteesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.NonVersionableAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.Versioning.NonVersionableAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.ResourceConsumptionAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.ResourceExposureAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.Versioning.SupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | +| System.Runtime.Versioning.SupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.TargetFrameworkAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.Versioning.TargetFrameworkAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.TargetPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Runtime.Versioning.TargetPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | | System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | Inherited | False | +| System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | True | +| System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Security.AllowPartiallyTrustedCallersAttribute | [AttributeUsageAttribute(...)] | AllowMultiple | False | | System.Security.AllowPartiallyTrustedCallersAttribute | [AttributeUsageAttribute(...)] | Inherited | False | | System.Security.IPermission | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0003 | @@ -1067,12 +1293,119 @@ attrArgNamed | System.Threading.Tasks.TplEventSource | [EventSourceAttribute(...)] | Guid | 2e5dba47-a3d2-4d16-8ee0-6671ffdcd7b5 | | System.Threading.Tasks.TplEventSource | [EventSourceAttribute(...)] | LocalizationResources | System.Private.CoreLib.Strings | | System.Threading.Tasks.TplEventSource | [EventSourceAttribute(...)] | Name | System.Threading.Tasks.TplEventSource | +| System.TimeOnly System.TimeOnly.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.TimeOnly System.TimeOnly.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.TimeSpan System.DateTime.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.TimeSpan System.DateTimeOffset.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.TimeSpan System.TimeSpan.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.TimeSpan System.TimeSpan.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.TimeSpan System.TimeSpan.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.UIntPtr System.UIntPtr.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.UIntPtr System.UIntPtr.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.UIntPtr System.UIntPtr.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.UIntPtr System.UIntPtr.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.UIntPtr System.UIntPtr.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| System.UIntPtr System.UIntPtr.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | | bool System.Reflection.Assembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0005 | | bool System.Reflection.Assembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | -| bool System.Reflection.Emit.AssemblyBuilder.GlobalAssemblyCache | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0005 | -| bool System.Reflection.Emit.AssemblyBuilder.GlobalAssemblyCache | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | | bool System.Reflection.RuntimeAssembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | DiagnosticId | SYSLIB0005 | | bool System.Reflection.RuntimeAssembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | UrlFormat | https://aka.ms/dotnet-warnings/{0} | +| byte byte.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| byte byte.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| byte byte.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| byte byte.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| byte byte.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| byte byte.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| char char.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| char char.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| char char.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| char char.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| char char.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| char char.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| decimal decimal.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double System.TimeSpan.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.E | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.Epsilon | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.NaN | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.NegativeInfinity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.NegativeZero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.Pi | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.PositiveInfinity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.Tau | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| double double.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.E | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.Epsilon | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.NaN | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.NegativeInfinity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.NegativeZero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.Pi | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.PositiveInfinity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.Tau | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| float float.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| int int.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| long long.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| sbyte sbyte.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| short short.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| uint uint.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| uint uint.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| uint uint.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| uint uint.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| uint uint.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| uint uint.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ulong ulong.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ulong ulong.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ulong ulong.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ulong ulong.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ulong ulong.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ulong ulong.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ushort ushort.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ushort ushort.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ushort ushort.MinValue | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ushort ushort.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ushort ushort.One | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | +| ushort ushort.Zero | [RequiresPreviewFeaturesAttribute(...)] | Url | https://aka.ms/dotnet-warnings/generic-math-preview | attrArgPositional | !0 System.ArraySegment`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | | !0 System.Collections.Generic.Dictionary`2.KeyCollection.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | @@ -1080,6 +1413,9 @@ attrArgPositional | !0 System.Collections.Generic.IAsyncEnumerator`1.Current | [NullableAttribute(...)] | 0 | 1 | | !0 System.Collections.Generic.IEnumerator`1.Current | [NullableAttribute(...)] | 0 | 1 | | !0 System.Collections.Generic.List`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | +| !0 System.Collections.Generic.Queue`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | +| !0 System.IO.Enumeration.FileSystemEnumerator`1.Current | [NullableAttribute(...)] | 0 | 1 | +| !0 System.ISignedNumber`1.NegativeOne | [NullableAttribute(...)] | 0 | 1 | | !0 System.Lazy`1.Value | [DebuggerBrowsableAttribute(...)] | 0 | 0 | | !0 System.Lazy`1.ValueForDebugDisplay | [NullableAttribute(...)] | 0 | 2 | | !0 System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | @@ -1093,6 +1429,7 @@ attrArgPositional | !0[] System.Collections.Concurrent.IProducerConsumerCollectionDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | !0[] System.Collections.Generic.DictionaryKeyCollectionDebugView`2.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | !0[] System.Collections.Generic.ICollectionDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | +| !0[] System.Collections.Generic.QueueDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | !0[] System.MemoryDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | !0[] System.SpanDebugView`1.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | !1 System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.Current | [NullableAttribute(...)] | 0 | 1 | @@ -1108,10 +1445,10 @@ attrArgPositional | Internal.Runtime.InteropServices.IClassFactory | [GuidAttribute(...)] | 0 | 00000001-0000-0000-C000-000000000046 | | Internal.Runtime.InteropServices.IClassFactory | [InterfaceTypeAttribute(...)] | 0 | 1 | | Internal.Runtime.InteropServices.IClassFactory | [NullableContextAttribute(...)] | 0 | 2 | -| Internal.Runtime.InteropServices.IClassFactory2 | [ComVisibleAttribute(...)] | 0 | False | -| Internal.Runtime.InteropServices.IClassFactory2 | [GuidAttribute(...)] | 0 | B196B28F-BAB4-101A-B69C-00AA00341D07 | -| Internal.Runtime.InteropServices.IClassFactory2 | [InterfaceTypeAttribute(...)] | 0 | 1 | | Interop.Sys.MountPointFound | [UnmanagedFunctionPointerAttribute(...)] | 0 | 2 | +| Microsoft.Win32.SafeHandles.SafeFileHandle | [NullableAttribute(...)] | 0 | 0 | +| Microsoft.Win32.SafeHandles.SafeFileHandle | [NullableContextAttribute(...)] | 0 | 2 | +| Microsoft.Win32.SafeHandles.SafeWaitHandle System.Threading.RegisteredWaitHandle.UserUnregisterWaitHandle | [NullableAttribute(...)] | 0 | 2 | | System.AccessViolationException | [NullableAttribute(...)] | 0 | 0 | | System.AccessViolationException | [NullableContextAttribute(...)] | 0 | 2 | | System.AccessViolationException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1208,7 +1545,7 @@ attrArgPositional | System.BadImageFormatException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.BitConverter | [NullableAttribute(...)] | 0 | 0 | | System.BitConverter | [NullableContextAttribute(...)] | 0 | 1 | -| System.BitConverter.<>c.<>9__39_0 | [TupleElementNamesAttribute(...)] | 0 | [value,startIndex,length] | +| System.BitConverter.<>c.<>9__43_0 | [TupleElementNamesAttribute(...)] | 0 | [value,startIndex,length] | | System.Buffer | [NullableAttribute(...)] | 0 | 0 | | System.Buffer | [NullableContextAttribute(...)] | 0 | 1 | | System.Buffers.ArrayPool`1 | [NullableAttribute(...)] | 0 | 0 | @@ -1264,6 +1601,7 @@ attrArgPositional | System.Collections.Generic.Comparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.Collections.Generic.Dictionary.KeyCollection System.Collections.Generic.Dictionary`2.Keys | [NullableAttribute(...)] | 0 | [1,0,0] | | System.Collections.Generic.Dictionary.ValueCollection System.Collections.Generic.Dictionary`2.Values | [NullableAttribute(...)] | 0 | [1,0,0] | +| System.Collections.Generic.Dictionary> System.Runtime.Loader.AssemblyLoadContext.AllContexts | [MemberNotNullAttribute(...)] | 0 | s_allContexts | | System.Collections.Generic.Dictionary`2 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | | System.Collections.Generic.Dictionary`2 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.IDictionaryDebugView`2 | | System.Collections.Generic.Dictionary`2 | [DefaultMemberAttribute(...)] | 0 | Item | @@ -1336,6 +1674,12 @@ attrArgPositional | System.Collections.Generic.ObjectEqualityComparer`1 | [NullableAttribute(...)] | 0 | [0,1] | | System.Collections.Generic.ObjectEqualityComparer`1 | [NullableContextAttribute(...)] | 0 | 2 | | System.Collections.Generic.ObjectEqualityComparer`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.Collections.Generic.Queue`1 | [DebuggerDisplayAttribute(...)] | 0 | Count = {Count} | +| System.Collections.Generic.Queue`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.Collections.Generic.QueueDebugView`1 | +| System.Collections.Generic.Queue`1 | [NullableAttribute(...)] | 0 | 0 | +| System.Collections.Generic.Queue`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.Collections.Generic.Queue`1 | [TypeForwardedFromAttribute(...)] | 0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.Collections.Generic.Queue`1.Enumerator | [NullableContextAttribute(...)] | 0 | 0 | | System.Collections.Generic.ReferenceEqualityComparer System.Collections.Generic.ReferenceEqualityComparer.Instance | [NullableAttribute(...)] | 0 | 1 | | System.Collections.Generic.ValueListBuilder`1 | [DefaultMemberAttribute(...)] | 0 | Item | | System.Collections.Generic.ValueListBuilder`1 | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | @@ -1350,7 +1694,7 @@ attrArgPositional | System.Collections.ICollection | [NullableContextAttribute(...)] | 0 | 1 | | System.Collections.IComparer | [NullableContextAttribute(...)] | 0 | 2 | | System.Collections.IComparer System.Collections.Hashtable.comparer | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IComparer System.Collections.Hashtable.comparer | [ObsoleteAttribute(...)] | 0 | Please use KeyComparer properties. | +| System.Collections.IComparer System.Collections.Hashtable.comparer | [ObsoleteAttribute(...)] | 0 | Hashtable.comparer has been deprecated. Use the KeyComparer properties instead. | | System.Collections.IDictionary | [DefaultMemberAttribute(...)] | 0 | Item | | System.Collections.IDictionary | [NullableContextAttribute(...)] | 0 | 1 | | System.Collections.IDictionary System.Exception.Data | [NullableAttribute(...)] | 0 | 1 | @@ -1361,10 +1705,10 @@ attrArgPositional | System.Collections.IEqualityComparer | [NullableContextAttribute(...)] | 0 | 1 | | System.Collections.IEqualityComparer System.Collections.Hashtable.EqualityComparer | [NullableAttribute(...)] | 0 | 2 | | System.Collections.IHashCodeProvider | [NullableContextAttribute(...)] | 0 | 1 | -| System.Collections.IHashCodeProvider | [ObsoleteAttribute(...)] | 0 | Please use IEqualityComparer instead. | +| System.Collections.IHashCodeProvider | [ObsoleteAttribute(...)] | 0 | IHashCodeProvider has been deprecated. Use IEqualityComparer instead. | | System.Collections.IHashCodeProvider | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.Collections.IHashCodeProvider System.Collections.Hashtable.hcp | [NullableAttribute(...)] | 0 | 2 | -| System.Collections.IHashCodeProvider System.Collections.Hashtable.hcp | [ObsoleteAttribute(...)] | 0 | Please use EqualityComparer property. | +| System.Collections.IHashCodeProvider System.Collections.Hashtable.hcp | [ObsoleteAttribute(...)] | 0 | Hashtable.hcp has been deprecated. Use the EqualityComparer property instead. | | System.Collections.IList | [DefaultMemberAttribute(...)] | 0 | Item | | System.Collections.IList | [NullableContextAttribute(...)] | 0 | 2 | | System.Collections.IStructuralComparable | [NullableContextAttribute(...)] | 0 | 1 | @@ -1397,9 +1741,18 @@ attrArgPositional | System.Console | [NullableAttribute(...)] | 0 | 0 | | System.Console | [NullableContextAttribute(...)] | 0 | 1 | | System.Console.CancelKeyPress | [NullableAttribute(...)] | 0 | 2 | +| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.Console.CancelKeyPress | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | +| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.ConsoleColor System.Console.BackgroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | +| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.ConsoleColor System.Console.ForegroundColor | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | | System.ContextMarshalException | [NullableAttribute(...)] | 0 | 0 | | System.ContextMarshalException | [NullableContextAttribute(...)] | 0 | 2 | | System.ContextMarshalException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1410,7 +1763,7 @@ attrArgPositional | System.CultureAwareComparer | [NullableAttribute(...)] | 0 | 0 | | System.CultureAwareComparer | [NullableContextAttribute(...)] | 0 | 2 | | System.CultureAwareComparer | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.CurrentSystemTimeZone | [ObsoleteAttribute(...)] | 0 | System.CurrentSystemTimeZone has been deprecated. Please investigate the use of System.TimeZoneInfo.Local instead. | +| System.CurrentSystemTimeZone | [ObsoleteAttribute(...)] | 0 | System.CurrentSystemTimeZone has been deprecated. Investigate the use of System.TimeZoneInfo.Local instead. | | System.DBNull | [NullableAttribute(...)] | 0 | 0 | | System.DBNull | [NullableContextAttribute(...)] | 0 | 1 | | System.DTSubString | [DefaultMemberAttribute(...)] | 0 | Item | @@ -1419,10 +1772,14 @@ attrArgPositional | System.DataMisalignedException | [NullableAttribute(...)] | 0 | 0 | | System.DataMisalignedException | [NullableContextAttribute(...)] | 0 | 2 | | System.DataMisalignedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.DateTime | [NullableAttribute(...)] | 0 | 0 | -| System.DateTime | [NullableContextAttribute(...)] | 0 | 1 | +| System.DateOnly System.DateOnly.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.DateOnly System.DateOnly.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.DateTime | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.DateTime System.DateTime.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.DateTime System.DateTime.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.DateTimeOffset | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.DateTimeOffset System.DateTimeOffset.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.DateTimeOffset System.DateTimeOffset.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.DateTimeResult | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.DateTimeResult | [ObsoleteAttribute(...)] | 1 | True | | System.Delegate | [ClassInterfaceAttribute(...)] | 0 | 0 | @@ -1436,7 +1793,7 @@ attrArgPositional | System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [AttributeUsageAttribute(...)] | 0 | 352 | | System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute | [NullableContextAttribute(...)] | 0 | 2 | -| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute | [AttributeUsageAttribute(...)] | 0 | 27072 | +| System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute | [AttributeUsageAttribute(...)] | 0 | 28108 | | System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [AttributeUsageAttribute(...)] | 0 | 749 | | System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute | [NullableContextAttribute(...)] | 0 | 2 | @@ -1453,7 +1810,10 @@ attrArgPositional | System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Diagnostics.CodeAnalysis.NotNullWhenAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | -| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 96 | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [AttributeUsageAttribute(...)] | 0 | 736 | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [NullableAttribute(...)] | 0 | 0 | +| System.Diagnostics.CodeAnalysis.RequiresAssemblyFilesAttribute | [NullableContextAttribute(...)] | 0 | 2 | +| System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 100 | | System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Diagnostics.CodeAnalysis.SuppressMessageAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | @@ -1507,6 +1867,10 @@ attrArgPositional | System.Diagnostics.Contracts.PureAttribute | [ConditionalAttribute(...)] | 0 | CONTRACTS_FULL | | System.Diagnostics.Debug | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Debug | [NullableContextAttribute(...)] | 0 | 2 | +| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | +| System.Diagnostics.Debug.AssertInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | +| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | +| System.Diagnostics.Debug.WriteIfInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.DebugProvider | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.DebugProvider | [NullableContextAttribute(...)] | 0 | 2 | | System.Diagnostics.DebuggableAttribute | [AttributeUsageAttribute(...)] | 0 | 3 | @@ -1528,18 +1892,23 @@ attrArgPositional | System.Diagnostics.DebuggerVisualizerAttribute | [NullableContextAttribute(...)] | 0 | 2 | | System.Diagnostics.StackFrame | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.StackFrame | [NullableContextAttribute(...)] | 0 | 2 | +| System.Diagnostics.StackFrameExtensions | [NullableAttribute(...)] | 0 | 0 | +| System.Diagnostics.StackFrameExtensions | [NullableContextAttribute(...)] | 0 | 1 | | System.Diagnostics.StackTrace | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.StackTrace | [NullableContextAttribute(...)] | 0 | 1 | | System.Diagnostics.StackTraceHiddenAttribute | [AttributeUsageAttribute(...)] | 0 | 108 | | System.Diagnostics.SymbolStore.ISymbolDocumentWriter | [NullableContextAttribute(...)] | 0 | 1 | +| System.Diagnostics.Tracing.CounterGroup | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Diagnostics.Tracing.DiagnosticCounter | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.DiagnosticCounter | [NullableContextAttribute(...)] | 0 | 1 | +| System.Diagnostics.Tracing.DiagnosticCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Diagnostics.Tracing.EventAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.Diagnostics.Tracing.EventAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.EventAttribute | [NullableContextAttribute(...)] | 0 | 2 | | System.Diagnostics.Tracing.EventChannelAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | | System.Diagnostics.Tracing.EventCounter | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.EventCounter | [NullableContextAttribute(...)] | 0 | 1 | +| System.Diagnostics.Tracing.EventCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Diagnostics.Tracing.EventDataAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | | System.Diagnostics.Tracing.EventDataAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.EventDataAttribute | [NullableContextAttribute(...)] | 0 | 2 | @@ -1550,8 +1919,12 @@ attrArgPositional | System.Diagnostics.Tracing.EventListener.EventSourceCreated | [NullableAttribute(...)] | 0 | [2,1] | | System.Diagnostics.Tracing.EventListener.EventWritten | [NullableAttribute(...)] | 0 | [2,1] | | System.Diagnostics.Tracing.EventPayload | [DefaultMemberAttribute(...)] | 0 | Item | +| System.Diagnostics.Tracing.EventSource | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | | System.Diagnostics.Tracing.EventSource | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.EventSource | [NullableContextAttribute(...)] | 0 | 2 | +| System.Diagnostics.Tracing.EventSource | [UnconditionalSuppressMessageAttribute(...)] | 0 | ReflectionAnalysis | +| System.Diagnostics.Tracing.EventSource | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2113:ReflectionToRequiresUnreferencedCode | +| System.Diagnostics.Tracing.EventSource | [UnconditionalSuppressMessageAttribute(...)] | 1 | IL2115:ReflectionToDynamicallyAccessedMembers | | System.Diagnostics.Tracing.EventSource System.Diagnostics.Tracing.EventWrittenEventArgs.EventSource | [NullableAttribute(...)] | 0 | 1 | | System.Diagnostics.Tracing.EventSource.EventCommandExecuted | [NullableAttribute(...)] | 0 | [2,1] | | System.Diagnostics.Tracing.EventSource.EventData | [NullableContextAttribute(...)] | 0 | 0 | @@ -1564,13 +1937,17 @@ attrArgPositional | System.Diagnostics.Tracing.EventSourceException | [NullableContextAttribute(...)] | 0 | 2 | | System.Diagnostics.Tracing.EventWrittenEventArgs | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.EventWrittenEventArgs | [NullableContextAttribute(...)] | 0 | 2 | +| System.Diagnostics.Tracing.EventWrittenEventArgs.MoreEventInfo System.Diagnostics.Tracing.EventWrittenEventArgs.MoreInfo | [NullableAttribute(...)] | 0 | 1 | | System.Diagnostics.Tracing.IncrementingEventCounter | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.IncrementingEventCounter | [NullableContextAttribute(...)] | 0 | 1 | +| System.Diagnostics.Tracing.IncrementingEventCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Diagnostics.Tracing.IncrementingPollingCounter | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.IncrementingPollingCounter | [NullableContextAttribute(...)] | 0 | 1 | +| System.Diagnostics.Tracing.IncrementingPollingCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Diagnostics.Tracing.NonEventAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.Diagnostics.Tracing.PollingCounter | [NullableAttribute(...)] | 0 | 0 | | System.Diagnostics.Tracing.PollingCounter | [NullableContextAttribute(...)] | 0 | 1 | +| System.Diagnostics.Tracing.PollingCounter | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Diagnostics.Tracing.SessionMask | [DefaultMemberAttribute(...)] | 0 | Item | | System.Diagnostics.Tracing.TraceLoggingEventHandleTable | [DefaultMemberAttribute(...)] | 0 | Item | | System.DivideByZeroException | [NullableAttribute(...)] | 0 | 0 | @@ -1598,10 +1975,11 @@ attrArgPositional | System.Exception | [NullableContextAttribute(...)] | 0 | 2 | | System.Exception | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.Exception.SerializeObjectState | [NullableAttribute(...)] | 0 | [2,1] | +| System.Exception.SerializeObjectState | [ObsoleteAttribute(...)] | 0 | BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information. | | System.Exception[] System.Reflection.ReflectionTypeLoadException.LoaderExceptions | [NullableAttribute(...)] | 0 | [1,2] | | System.ExecutionEngineException | [NullableAttribute(...)] | 0 | 0 | | System.ExecutionEngineException | [NullableContextAttribute(...)] | 0 | 2 | -| System.ExecutionEngineException | [ObsoleteAttribute(...)] | 0 | This type previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete. | +| System.ExecutionEngineException | [ObsoleteAttribute(...)] | 0 | ExecutionEngineException previously indicated an unspecified fatal error in the runtime. The runtime no longer raises this exception so this type is obsolete. | | System.ExecutionEngineException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.FieldAccessException | [NullableAttribute(...)] | 0 | 0 | | System.FieldAccessException | [NullableContextAttribute(...)] | 0 | 2 | @@ -1654,8 +2032,8 @@ attrArgPositional | System.Globalization.CultureNotFoundException | [NullableAttribute(...)] | 0 | 0 | | System.Globalization.CultureNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | | System.Globalization.CultureNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Globalization.CultureTypes.FrameworkCultures | [ObsoleteAttribute(...)] | 0 | This value has been deprecated. Please use other values in CultureTypes. | -| System.Globalization.CultureTypes.WindowsOnlyCultures | [ObsoleteAttribute(...)] | 0 | This value has been deprecated. Please use other values in CultureTypes. | +| System.Globalization.CultureTypes.FrameworkCultures | [ObsoleteAttribute(...)] | 0 | CultureTypes.FrameworkCultures has been deprecated. Use other values in CultureTypes instead. | +| System.Globalization.CultureTypes.WindowsOnlyCultures | [ObsoleteAttribute(...)] | 0 | CultureTypes.WindowsOnlyCultures has been deprecated. Use other values in CultureTypes instead. | | System.Globalization.DateTimeFormatInfo | [NullableAttribute(...)] | 0 | 0 | | System.Globalization.DateTimeFormatInfo | [NullableContextAttribute(...)] | 0 | 1 | | System.Globalization.EraInfo[] System.Globalization.ChineseLunisolarCalendar.CalEraInfo | [NullableAttribute(...)] | 0 | [2,1] | @@ -1669,6 +2047,8 @@ attrArgPositional | System.Globalization.HijriCalendar | [NullableContextAttribute(...)] | 0 | 1 | | System.Globalization.IdnMapping | [NullableAttribute(...)] | 0 | 0 | | System.Globalization.IdnMapping | [NullableContextAttribute(...)] | 0 | 1 | +| System.Globalization.InvariantModeCasing.<>c.<>9__2_0 | [TupleElementNamesAttribute(...)] | 0 | [s,i] | +| System.Globalization.InvariantModeCasing.<>c.<>9__3_0 | [TupleElementNamesAttribute(...)] | 0 | [s,i] | | System.Globalization.JapaneseCalendar | [NullableAttribute(...)] | 0 | 0 | | System.Globalization.JapaneseCalendar | [NullableContextAttribute(...)] | 0 | 1 | | System.Globalization.JapaneseLunisolarCalendar | [NullableAttribute(...)] | 0 | 0 | @@ -1715,31 +2095,97 @@ attrArgPositional | System.Globalization.UmAlQuraCalendar | [NullableAttribute(...)] | 0 | 0 | | System.Globalization.UmAlQuraCalendar | [NullableContextAttribute(...)] | 0 | 1 | | System.Guid | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.Half System.Half.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.E | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.Epsilon | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.NaN | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.NegativeInfinity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.NegativeZero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.Pi | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.PositiveInfinity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.Tau | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.Half System.Half.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.HashCode | [NullableAttribute(...)] | 0 | 0 | | System.HashCode | [NullableContextAttribute(...)] | 0 | 1 | -| System.HexConverter.<>c.<>9__4_0 | [TupleElementNamesAttribute(...)] | 0 | [Ptr,Length,casing] | +| System.HexConverter.<>c.<>9__5_0 | [TupleElementNamesAttribute(...)] | 0 | [Ptr,Length,casing] | +| System.IAdditionOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IAdditionOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IAdditiveIdentity`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IAdditiveIdentity`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IAsyncResult | [NullableContextAttribute(...)] | 0 | 1 | +| System.IBinaryFloatingPoint`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IBinaryInteger`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IBinaryInteger`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IBinaryNumber`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IBitwiseOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IBitwiseOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.ICloneable | [NullableContextAttribute(...)] | 0 | 1 | | System.IComparable | [NullableContextAttribute(...)] | 0 | 2 | | System.IComparable`1 | [NullableContextAttribute(...)] | 0 | 2 | +| System.IComparisonOperators`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IComparisonOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IConvertible | [CLSCompliantAttribute(...)] | 0 | False | | System.IConvertible | [NullableContextAttribute(...)] | 0 | 2 | | System.ICustomFormatter | [NullableContextAttribute(...)] | 0 | 2 | +| System.IDecrementOperators`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IDecrementOperators`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IDivisionOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IDivisionOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IEqualityOperators`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IEqualityOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IEquatable`1 | [NullableContextAttribute(...)] | 0 | 2 | +| System.IFloatingPoint`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IFloatingPoint`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IFormatProvider | [NullableContextAttribute(...)] | 0 | 2 | | System.IFormattable | [NullableContextAttribute(...)] | 0 | 2 | +| System.IIncrementOperators`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IIncrementOperators`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IMinMaxValue`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IMinMaxValue`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IModulusOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IModulusOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IMultiplicativeIdentity`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IMultiplicativeIdentity`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IMultiplyOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IMultiplyOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.INumber`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.INumber`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IO.BinaryReader | [NullableAttribute(...)] | 0 | 0 | | System.IO.BinaryReader | [NullableContextAttribute(...)] | 0 | 1 | | System.IO.BinaryWriter | [NullableAttribute(...)] | 0 | 0 | | System.IO.BinaryWriter | [NullableContextAttribute(...)] | 0 | 1 | | System.IO.BufferedStream | [NullableAttribute(...)] | 0 | 0 | | System.IO.BufferedStream | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.Directory | [NullableAttribute(...)] | 0 | 0 | +| System.IO.Directory | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.DirectoryInfo | [NullableAttribute(...)] | 0 | 0 | +| System.IO.DirectoryInfo | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.DirectoryInfo System.IO.DirectoryInfo.Parent | [NullableAttribute(...)] | 0 | 2 | +| System.IO.DirectoryInfo System.IO.FileInfo.Directory | [NullableAttribute(...)] | 0 | 2 | | System.IO.DirectoryNotFoundException | [NullableAttribute(...)] | 0 | 0 | | System.IO.DirectoryNotFoundException | [NullableContextAttribute(...)] | 0 | 2 | | System.IO.DirectoryNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.IO.EndOfStreamException | [NullableAttribute(...)] | 0 | 0 | | System.IO.EndOfStreamException | [NullableContextAttribute(...)] | 0 | 2 | | System.IO.EndOfStreamException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.IO.Enumeration.FileSystemEntry | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | +| System.IO.Enumeration.FileSystemEntry | [ObsoleteAttribute(...)] | 1 | True | +| System.IO.Enumeration.FileSystemEntry._fileNameBuffer | [FixedBufferAttribute(...)] | 0 | System.Char | +| System.IO.Enumeration.FileSystemEntry._fileNameBuffer | [FixedBufferAttribute(...)] | 1 | 256 | +| System.IO.Enumeration.FileSystemEnumerable.FindPredicate System.IO.Enumeration.FileSystemEnumerable`1.ShouldIncludePredicate | [NullableAttribute(...)] | 0 | [2,0] | +| System.IO.Enumeration.FileSystemEnumerable.FindPredicate System.IO.Enumeration.FileSystemEnumerable`1.ShouldRecursePredicate | [NullableAttribute(...)] | 0 | [2,0] | +| System.IO.Enumeration.FileSystemEnumerator`1._pending | [TupleElementNamesAttribute(...)] | 0 | [Path,RemainingDepth] | +| System.IO.EnumerationOptions | [NullableAttribute(...)] | 0 | 0 | +| System.IO.EnumerationOptions | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.File | [NullableAttribute(...)] | 0 | 0 | +| System.IO.File | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.FileInfo | [NullableAttribute(...)] | 0 | 0 | +| System.IO.FileInfo | [NullableContextAttribute(...)] | 0 | 1 | | System.IO.FileLoadException | [NullableAttribute(...)] | 0 | 0 | | System.IO.FileLoadException | [NullableContextAttribute(...)] | 0 | 2 | | System.IO.FileLoadException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1748,6 +2194,8 @@ attrArgPositional | System.IO.FileNotFoundException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.IO.FileStream | [NullableAttribute(...)] | 0 | 0 | | System.IO.FileStream | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.FileSystemInfo | [NullableAttribute(...)] | 0 | 0 | +| System.IO.FileSystemInfo | [NullableContextAttribute(...)] | 0 | 1 | | System.IO.IOException | [NullableAttribute(...)] | 0 | 0 | | System.IO.IOException | [NullableContextAttribute(...)] | 0 | 2 | | System.IO.IOException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1756,11 +2204,9 @@ attrArgPositional | System.IO.InvalidDataException | [TypeForwardedFromAttribute(...)] | 0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.IO.MemoryStream | [NullableAttribute(...)] | 0 | 0 | | System.IO.MemoryStream | [NullableContextAttribute(...)] | 0 | 1 | -| System.IO.Path.<>c.<>9__37_0 | [TupleElementNamesAttribute(...)] | 0 | [First,FirstLength,Second,SecondLength,HasSeparator] | -| System.IO.Path.<>c.<>9__38_0 | [TupleElementNamesAttribute(...)] | 0 | [First,FirstLength,Second,SecondLength,Third,ThirdLength,FirstHasSeparator,ThirdHasSeparator,null] | -| System.IO.Path.<>c.<>9__39_0 | [TupleElementNamesAttribute(...)] | 0 | [First,FirstLength,Second,SecondLength,Third,ThirdLength,Fourth,FourthLength,FirstHasSeparator,ThirdHasSeparator,FourthHasSeparator,null,null,null,null] | -| System.IO.Path.InvalidPathChars | [NullableAttribute(...)] | 0 | 1 | -| System.IO.Path.InvalidPathChars | [ObsoleteAttribute(...)] | 0 | Please use GetInvalidPathChars or GetInvalidFileNameChars instead. | +| System.IO.Path | [NullableAttribute(...)] | 0 | 0 | +| System.IO.Path | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.Path.InvalidPathChars | [ObsoleteAttribute(...)] | 0 | Path.InvalidPathChars has been deprecated. Use GetInvalidPathChars or GetInvalidFileNameChars instead. | | System.IO.PathTooLongException | [NullableAttribute(...)] | 0 | 0 | | System.IO.PathTooLongException | [NullableContextAttribute(...)] | 0 | 2 | | System.IO.PathTooLongException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1776,12 +2222,28 @@ attrArgPositional | System.IO.StringWriter | [NullableContextAttribute(...)] | 0 | 1 | | System.IO.TextReader | [NullableAttribute(...)] | 0 | 0 | | System.IO.TextReader | [NullableContextAttribute(...)] | 0 | 1 | +| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.IO.TextReader System.Console.In | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | | System.IO.TextWriter | [NullableAttribute(...)] | 0 | 0 | | System.IO.TextWriter | [NullableContextAttribute(...)] | 0 | 1 | | System.IObservable`1 | [NullableContextAttribute(...)] | 0 | 1 | | System.IObserver`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IParseable`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IParseable`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IProgress`1 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IShiftOperators`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IShiftOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.ISignedNumber`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.ISpanParseable`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.ISubtractionOperators`3 | [NullableContextAttribute(...)] | 0 | 1 | +| System.ISubtractionOperators`3 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IUnaryNegationOperators`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IUnaryNegationOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IUnaryPlusOperators`2 | [NullableContextAttribute(...)] | 0 | 1 | +| System.IUnaryPlusOperators`2 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IUnsignedNumber`1 | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.IndexOutOfRangeException | [NullableAttribute(...)] | 0 | 0 | | System.IndexOutOfRangeException | [NullableContextAttribute(...)] | 0 | 2 | | System.IndexOutOfRangeException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1792,8 +2254,15 @@ attrArgPositional | System.InsufficientMemoryException | [NullableContextAttribute(...)] | 0 | 2 | | System.InsufficientMemoryException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.IntPtr | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.IntPtr System.IO.FileStream.Handle | [ObsoleteAttribute(...)] | 0 | This property has been deprecated. Please use FileStream's SafeFileHandle property instead. https://go.microsoft.com/fwlink/?linkid=14202 | -| System.IntPtr System.Threading.WaitHandle.Handle | [ObsoleteAttribute(...)] | 0 | Use the SafeWaitHandle property instead. | +| System.IntPtr System.IO.FileStream.Handle | [ObsoleteAttribute(...)] | 0 | FileStream.Handle has been deprecated. Use FileStream's SafeFileHandle property instead. | +| System.IntPtr System.IntPtr.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.IntPtr.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.IntPtr.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.IntPtr.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.IntPtr.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.IntPtr.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.IntPtr.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.IntPtr System.Threading.WaitHandle.Handle | [ObsoleteAttribute(...)] | 0 | WaitHandleHandle has been deprecated. Use the SafeWaitHandle property instead. | | System.InvalidCastException | [NullableAttribute(...)] | 0 | 0 | | System.InvalidCastException | [NullableContextAttribute(...)] | 0 | 2 | | System.InvalidCastException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1812,8 +2281,8 @@ attrArgPositional | System.Lazy`1 | [NullableContextAttribute(...)] | 0 | 1 | | System.Lazy`2 | [NullableAttribute(...)] | 0 | [0,1] | | System.Lazy`2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.LoaderOptimization.DisallowBindings | [ObsoleteAttribute(...)] | 0 | This method has been deprecated. Please use Assembly.Load() instead. https://go.microsoft.com/fwlink/?linkid=14202 | -| System.LoaderOptimization.DomainMask | [ObsoleteAttribute(...)] | 0 | This method has been deprecated. Please use Assembly.Load() instead. https://go.microsoft.com/fwlink/?linkid=14202 | +| System.LoaderOptimization.DisallowBindings | [ObsoleteAttribute(...)] | 0 | LoaderOptimization.DisallowBindings has been deprecated and is not supported. | +| System.LoaderOptimization.DomainMask | [ObsoleteAttribute(...)] | 0 | LoaderOptimization.DomainMask has been deprecated and is not supported. | | System.LoaderOptimizationAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.MTAThreadAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.MarshalByRefObject | [ClassInterfaceAttribute(...)] | 0 | 1 | @@ -1826,6 +2295,9 @@ attrArgPositional | System.Memory System.Buffers.IMemoryOwner`1.Memory | [NullableAttribute(...)] | 0 | [0,1] | | System.Memory System.Buffers.MemoryManager`1.Memory | [NullableAttribute(...)] | 0 | [0,1] | | System.Memory System.Memory`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | +| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | +| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | +| System.MemoryExtensions.TryWriteInterpolatedStringHandler | [ObsoleteAttribute(...)] | 1 | True | | System.Memory`1 | [DebuggerDisplayAttribute(...)] | 0 | {ToString(),raw} | | System.Memory`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.MemoryDebugView`1 | | System.Memory`1 | [NullableAttribute(...)] | 0 | 0 | @@ -1875,12 +2347,6 @@ attrArgPositional | System.Number.DiyFp | [ObsoleteAttribute(...)] | 1 | True | | System.Number.NumberBuffer | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Number.NumberBuffer | [ObsoleteAttribute(...)] | 1 | True | -| System.Numerics.Vector2 | [NullableAttribute(...)] | 0 | 0 | -| System.Numerics.Vector2 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector3 | [NullableAttribute(...)] | 0 | 0 | -| System.Numerics.Vector3 | [NullableContextAttribute(...)] | 0 | 1 | -| System.Numerics.Vector4 | [NullableAttribute(...)] | 0 | 0 | -| System.Numerics.Vector4 | [NullableContextAttribute(...)] | 0 | 1 | | System.Numerics.Vector`1 | [DefaultMemberAttribute(...)] | 0 | Item | | System.ObjectDisposedException | [NullableAttribute(...)] | 0 | 0 | | System.ObjectDisposedException | [NullableContextAttribute(...)] | 0 | 1 | @@ -1915,6 +2381,8 @@ attrArgPositional | System.Progress`1 | [NullableAttribute(...)] | 0 | 0 | | System.Progress`1 | [NullableContextAttribute(...)] | 0 | 1 | | System.Progress`1.ProgressChanged | [NullableAttribute(...)] | 0 | [2,1] | +| System.Random | [NullableAttribute(...)] | 0 | 0 | +| System.Random | [NullableContextAttribute(...)] | 0 | 1 | | System.RankException | [NullableAttribute(...)] | 0 | 0 | | System.RankException | [NullableContextAttribute(...)] | 0 | 2 | | System.RankException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -1926,10 +2394,12 @@ attrArgPositional | System.ReadOnlySpan System.ReadOnlyMemory`1.Span | [NullableAttribute(...)] | 0 | [0,1] | | System.ReadOnlySpan System.ReadOnlySpan`1.Empty | [NullableAttribute(...)] | 0 | [0,1] | | System.ReadOnlySpan System.Globalization.CompareInfo.HighCharTable | [NullableAttribute(...)] | 0 | 0 | +| System.ReadOnlySpan System.Diagnostics.Tracing.EventSource.ProviderMetadata | [NullableAttribute(...)] | 0 | 0 | +| System.ReadOnlySpan System.IO.Path.Base32Char | [NullableAttribute(...)] | 0 | 0 | | System.ReadOnlySpan System.Text.Encoding.Preamble | [NullableAttribute(...)] | 0 | 0 | | System.ReadOnlySpan System.Text.UTF32Encoding.Preamble | [NullableAttribute(...)] | 0 | 0 | | System.ReadOnlySpan System.Text.UnicodeEncoding.Preamble | [NullableAttribute(...)] | 0 | 0 | -| System.ReadOnlySpan char.Latin1CharInfo | [NullableAttribute(...)] | 0 | 0 | +| System.ReadOnlySpan System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.Text | [NullableAttribute(...)] | 0 | 0 | | System.ReadOnlySpan System.Convert.DecodingMap | [NullableAttribute(...)] | 0 | 0 | | System.ReadOnlySpan`1 | [DebuggerDisplayAttribute(...)] | 0 | {ToString(),raw} | | System.ReadOnlySpan`1 | [DebuggerTypeProxyAttribute(...)] | 0 | System.SpanDebugView`1 | @@ -2042,7 +2512,7 @@ attrArgPositional | System.Reflection.Emit.EventBuilder | [NullableContextAttribute(...)] | 0 | 1 | | System.Reflection.Emit.FieldBuilder | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.Emit.FieldBuilder | [NullableContextAttribute(...)] | 0 | 1 | -| System.Reflection.Emit.FlowControl.Phi | [ObsoleteAttribute(...)] | 0 | This API has been deprecated. https://go.microsoft.com/fwlink/?linkid=14202 | +| System.Reflection.Emit.FlowControl.Phi | [ObsoleteAttribute(...)] | 0 | FlowControl.Phi has been deprecated and is not supported. | | System.Reflection.Emit.GenericTypeParameterBuilder | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.Emit.GenericTypeParameterBuilder | [NullableContextAttribute(...)] | 0 | 1 | | System.Reflection.Emit.ILGenerator | [NullableAttribute(...)] | 0 | 0 | @@ -2056,8 +2526,8 @@ attrArgPositional | System.Reflection.Emit.ModuleBuilder | [NullableContextAttribute(...)] | 0 | 1 | | System.Reflection.Emit.OpCode | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.Emit.OpCode | [NullableContextAttribute(...)] | 0 | 2 | -| System.Reflection.Emit.OpCodeType.Annotation | [ObsoleteAttribute(...)] | 0 | This API has been deprecated. https://go.microsoft.com/fwlink/?linkid=14202 | -| System.Reflection.Emit.OperandType.InlinePhi | [ObsoleteAttribute(...)] | 0 | This API has been deprecated. https://go.microsoft.com/fwlink/?linkid=14202 | +| System.Reflection.Emit.OpCodeType.Annotation | [ObsoleteAttribute(...)] | 0 | OpCodeType.Annotation has been deprecated and is not supported. | +| System.Reflection.Emit.OperandType.InlinePhi | [ObsoleteAttribute(...)] | 0 | OperandType.InlinePhi has been deprecated and is not supported. | | System.Reflection.Emit.ParameterBuilder | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.Emit.ParameterBuilder | [NullableContextAttribute(...)] | 0 | 2 | | System.Reflection.Emit.PropertyBuilder | [NullableAttribute(...)] | 0 | 0 | @@ -2089,6 +2559,9 @@ attrArgPositional | System.Reflection.ManifestResourceInfo | [NullableContextAttribute(...)] | 0 | 2 | | System.Reflection.MemberInfo | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.MemberInfo | [NullableContextAttribute(...)] | 0 | 1 | +| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | +| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [NullableAttribute(...)] | 0 | 0 | +| System.Reflection.Metadata.MetadataUpdateHandlerAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Reflection.MetadataEnumResult | [DefaultMemberAttribute(...)] | 0 | Item | | System.Reflection.MetadataEnumResult.smallResult | [FixedBufferAttribute(...)] | 0 | System.Int32 | | System.Reflection.MetadataEnumResult.smallResult | [FixedBufferAttribute(...)] | 1 | 16 | @@ -2106,6 +2579,11 @@ attrArgPositional | System.Reflection.Missing.Value | [NullableAttribute(...)] | 0 | 1 | | System.Reflection.Module | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.Module | [NullableContextAttribute(...)] | 0 | 1 | +| System.Reflection.NullabilityInfo | [NullableAttribute(...)] | 0 | 0 | +| System.Reflection.NullabilityInfo | [NullableContextAttribute(...)] | 0 | 1 | +| System.Reflection.NullabilityInfo System.Reflection.NullabilityInfo.ElementType | [NullableAttribute(...)] | 0 | 2 | +| System.Reflection.NullabilityInfoContext | [NullableAttribute(...)] | 0 | 0 | +| System.Reflection.NullabilityInfoContext | [NullableContextAttribute(...)] | 0 | 1 | | System.Reflection.ObfuscateAssemblyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | | System.Reflection.ObfuscationAttribute | [AttributeUsageAttribute(...)] | 0 | 8157 | | System.Reflection.ObfuscationAttribute | [NullableAttribute(...)] | 0 | 0 | @@ -2128,6 +2606,8 @@ attrArgPositional | System.Reflection.RuntimeReflectionExtensions | [NullableContextAttribute(...)] | 0 | 1 | | System.Reflection.StrongNameKeyPair | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.StrongNameKeyPair | [NullableContextAttribute(...)] | 0 | 1 | +| System.Reflection.StrongNameKeyPair | [ObsoleteAttribute(...)] | 0 | Strong name signing is not supported and throws PlatformNotSupportedException. | +| System.Reflection.StrongNameKeyPair System.Reflection.AssemblyName.KeyPair | [ObsoleteAttribute(...)] | 0 | Strong name signing is not supported and throws PlatformNotSupportedException. | | System.Reflection.TargetException | [NullableAttribute(...)] | 0 | 0 | | System.Reflection.TargetException | [NullableContextAttribute(...)] | 0 | 2 | | System.Reflection.TargetException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -2157,6 +2637,7 @@ attrArgPositional | System.Resources.ResourceManager | [NullableContextAttribute(...)] | 0 | 1 | | System.Resources.ResourceManager.MainAssembly | [NullableAttribute(...)] | 0 | 2 | | System.Resources.ResourceManager._userResourceSet | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | +| System.Resources.ResourceReader.s_binaryFormatterType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 1 | | System.Resources.ResourceSet | [NullableAttribute(...)] | 0 | 0 | | System.Resources.ResourceSet | [NullableContextAttribute(...)] | 0 | 1 | | System.Resources.SatelliteContractVersionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | @@ -2174,7 +2655,7 @@ attrArgPositional | System.Runtime.CompilerServices.AsyncIteratorMethodBuilder | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.AsyncIteratorMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | -| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [AttributeUsageAttribute(...)] | 0 | 5148 | +| System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [AttributeUsageAttribute(...)] | 0 | 5212 | | System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.AsyncMethodBuilderAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.AsyncStateMachineAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | @@ -2204,6 +2685,7 @@ attrArgPositional | System.Runtime.CompilerServices.ContractHelper | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.ContractHelper | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.CompilerServices.ContractHelper.InternalContractFailed | [NullableAttribute(...)] | 0 | [2,1] | +| System.Runtime.CompilerServices.CreateNewOnMetadataUpdateAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | | System.Runtime.CompilerServices.CustomConstantAttribute | [AttributeUsageAttribute(...)] | 0 | 2304 | | System.Runtime.CompilerServices.CustomConstantAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.CustomConstantAttribute | [NullableContextAttribute(...)] | 0 | 2 | @@ -2212,10 +2694,15 @@ attrArgPositional | System.Runtime.CompilerServices.DateTimeConstantAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.DecimalConstantAttribute | [AttributeUsageAttribute(...)] | 0 | 2304 | | System.Runtime.CompilerServices.DefaultDependencyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | +| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [NullableContextAttribute(...)] | 0 | 2 | +| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | +| System.Runtime.CompilerServices.DefaultInterpolatedStringHandler | [ObsoleteAttribute(...)] | 1 | True | | System.Runtime.CompilerServices.DependencyAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.DependencyAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.DependencyAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | +| System.Runtime.CompilerServices.DisablePrivateReflectionAttribute | [ObsoleteAttribute(...)] | 0 | DisablePrivateReflectionAttribute has no effect in .NET 6.0+. | | System.Runtime.CompilerServices.DiscardableAttribute | [AttributeUsageAttribute(...)] | 0 | 32767 | | System.Runtime.CompilerServices.EnumeratorCancellationAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | | System.Runtime.CompilerServices.ExtensionAttribute | [AttributeUsageAttribute(...)] | 0 | 69 | @@ -2233,6 +2720,10 @@ attrArgPositional | System.Runtime.CompilerServices.InternalsVisibleToAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.InternalsVisibleToAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.InternalsVisibleToAttribute | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | +| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.CompilerServices.InterpolatedStringHandlerArgumentAttribute | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute | [AttributeUsageAttribute(...)] | 0 | 12 | | System.Runtime.CompilerServices.IntrinsicAttribute | [AttributeUsageAttribute(...)] | 0 | 364 | | System.Runtime.CompilerServices.IsByRefLikeAttribute | [AttributeUsageAttribute(...)] | 0 | 8 | | System.Runtime.CompilerServices.IsByRefLikeAttribute | [EditorBrowsableAttribute(...)] | 0 | 1 | @@ -2248,6 +2739,10 @@ attrArgPositional | System.Runtime.CompilerServices.NullablePublicOnlyAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | | System.Runtime.CompilerServices.ObjectHandleOnStack | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Runtime.CompilerServices.ObjectHandleOnStack | [ObsoleteAttribute(...)] | 1 | True | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1 | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1 | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.PreserveBaseOverridesAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.Runtime.CompilerServices.QCallAssembly | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Runtime.CompilerServices.QCallAssembly | [ObsoleteAttribute(...)] | 1 | True | @@ -2261,6 +2756,7 @@ attrArgPositional | System.Runtime.CompilerServices.RuntimeCompatibilityAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.RuntimeFeature | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.RuntimeFeature | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.CompilerServices.RuntimeFeature.VirtualStaticsInInterfaces | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.Runtime.CompilerServices.RuntimeHelpers | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.RuntimeHelpers | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.RuntimeHelpers.CleanupCode | [NullableContextAttribute(...)] | 0 | 0 | @@ -2280,6 +2776,7 @@ attrArgPositional | System.Runtime.CompilerServices.StringHandleOnStack | [ObsoleteAttribute(...)] | 1 | True | | System.Runtime.CompilerServices.StrongBox`1.Value | [NullableAttribute(...)] | 0 | 1 | | System.Runtime.CompilerServices.SuppressIldasmAttribute | [AttributeUsageAttribute(...)] | 0 | 3 | +| System.Runtime.CompilerServices.SuppressIldasmAttribute | [ObsoleteAttribute(...)] | 0 | SuppressIldasmAttribute has no effect in .NET 6.0+. | | System.Runtime.CompilerServices.SwitchExpressionException | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.CompilerServices.SwitchExpressionException | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.CompilerServices.SwitchExpressionException | [TypeForwardedFromAttribute(...)] | 0 | System.Runtime.Extensions, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | @@ -2299,11 +2796,14 @@ attrArgPositional | System.Runtime.ConstrainedExecution.PrePrepareMethodAttribute | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | | System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [AttributeUsageAttribute(...)] | 0 | 1133 | | System.Runtime.ConstrainedExecution.ReliabilityContractAttribute | [ObsoleteAttribute(...)] | 0 | The Constrained Execution Region (CER) feature is not supported. | +| System.Runtime.DependentHandle | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.DependentHandle | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.ExceptionServices.ExceptionDispatchInfo | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.ExceptionServices.ExceptionDispatchInfo | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.ExceptionServices.FirstChanceExceptionEventArgs | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | +| System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute | [ObsoleteAttribute(...)] | 0 | Recovery from corrupted process state exceptions is not supported; HandleProcessCorruptedStateExceptionsAttribute is ignored. | | System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.Runtime.InteropServices.AllowReversePInvokeCallsAttribute | [ObsoleteAttribute(...)] | 0 | Code Access Security is not supported or honored by the runtime. | | System.Runtime.InteropServices.ArrayWithOffset | [NullableAttribute(...)] | 0 | 0 | @@ -2311,13 +2811,17 @@ attrArgPositional | System.Runtime.InteropServices.BStrWrapper | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.BStrWrapper | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.InteropServices.BestFitMappingAttribute | [AttributeUsageAttribute(...)] | 0 | 1037 | +| System.Runtime.InteropServices.CLong | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.InteropServices.COMException | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.COMException | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.InteropServices.COMException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.Runtime.InteropServices.CULong | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.InteropServices.ClassInterfaceAttribute | [AttributeUsageAttribute(...)] | 0 | 5 | | System.Runtime.InteropServices.CoClassAttribute | [AttributeUsageAttribute(...)] | 0 | 1024 | | System.Runtime.InteropServices.CoClassAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.CoClassAttribute | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.InteropServices.CollectionsMarshal | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.InteropServices.CollectionsMarshal | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | | System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.ComDefaultInterfaceAttribute | [NullableContextAttribute(...)] | 0 | 1 | @@ -2393,7 +2897,10 @@ attrArgPositional | System.Runtime.InteropServices.ComWrappers | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.InteropServices.ComWrappers | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.ComWrappers | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.ComWrappers | [SupportedOSPlatformAttribute(...)] | 0 | windows | +| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | android | +| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.Runtime.InteropServices.ComWrappers | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | | System.Runtime.InteropServices.ComWrappers.ComInterfaceDispatch | [NullableContextAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry | [NullableContextAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.DefaultCharSetAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | @@ -2412,7 +2919,6 @@ attrArgPositional | System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute | [AttributeUsageAttribute(...)] | 0 | 1024 | | System.Runtime.InteropServices.ErrorWrapper | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.ErrorWrapper | [NullableContextAttribute(...)] | 0 | 1 | -| System.Runtime.InteropServices.Expando.IExpando | [GuidAttribute(...)] | 0 | AFBF15E6-C37C-11d2-B88E-00A0C9B471B8 | | System.Runtime.InteropServices.ExternalException | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.ExternalException | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.InteropServices.ExternalException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -2446,8 +2952,18 @@ attrArgPositional | System.Runtime.InteropServices.MarshalDirectiveException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.Runtime.InteropServices.NativeLibrary | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.NativeLibrary | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal | [CLSCompliantAttribute(...)] | 0 | False | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal | [SupportedOSPlatformAttribute(...)] | 0 | macos | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCTrackedTypeAttribute | [SupportedOSPlatformAttribute(...)] | 0 | macos | | System.Runtime.InteropServices.OptionalAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | | System.Runtime.InteropServices.OutAttribute | [AttributeUsageAttribute(...)] | 0 | 2048 | +| System.Runtime.InteropServices.PosixSignal.SIGCHLD | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | +| System.Runtime.InteropServices.PosixSignal.SIGCONT | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | +| System.Runtime.InteropServices.PosixSignal.SIGTSTP | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | +| System.Runtime.InteropServices.PosixSignal.SIGTTIN | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | +| System.Runtime.InteropServices.PosixSignal.SIGTTOU | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | +| System.Runtime.InteropServices.PosixSignal.SIGWINCH | [UnsupportedOSPlatformAttribute(...)] | 0 | windows | | System.Runtime.InteropServices.PreserveSigAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.Runtime.InteropServices.ProgIdAttribute | [AttributeUsageAttribute(...)] | 0 | 4 | | System.Runtime.InteropServices.ProgIdAttribute | [NullableAttribute(...)] | 0 | 0 | @@ -2470,6 +2986,8 @@ attrArgPositional | System.Runtime.InteropServices.TypeIdentifierAttribute | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.InteropServices.UnknownWrapper | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.InteropServices.UnknownWrapper | [NullableContextAttribute(...)] | 0 | 2 | +| System.Runtime.InteropServices.UnmanagedCallConvAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | +| System.Runtime.InteropServices.UnmanagedCallConvAttribute.CallConvs | [NullableAttribute(...)] | 0 | [2,1] | | System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute | [AttributeUsageAttribute(...)] | 0 | 64 | | System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.CallConvs | [NullableAttribute(...)] | 0 | [2,1] | | System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.EntryPoint | [NullableAttribute(...)] | 0 | 2 | @@ -2493,6 +3011,8 @@ attrArgPositional | System.Runtime.Intrinsics.X86.Aes | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.Intrinsics.X86.Avx | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.Intrinsics.X86.Avx2 | [CLSCompliantAttribute(...)] | 0 | False | +| System.Runtime.Intrinsics.X86.AvxVnni | [CLSCompliantAttribute(...)] | 0 | False | +| System.Runtime.Intrinsics.X86.AvxVnni | [RequiresPreviewFeaturesAttribute(...)] | 0 | AvxVnni is in preview. | | System.Runtime.Intrinsics.X86.Bmi1 | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.Intrinsics.X86.Bmi2 | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.Intrinsics.X86.Fma | [CLSCompliantAttribute(...)] | 0 | False | @@ -2507,6 +3027,10 @@ attrArgPositional | System.Runtime.Intrinsics.X86.Ssse3 | [CLSCompliantAttribute(...)] | 0 | False | | System.Runtime.Loader.AssemblyDependencyResolver | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.Loader.AssemblyDependencyResolver | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | android | +| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.Runtime.Loader.AssemblyDependencyResolver | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | | System.Runtime.Loader.AssemblyLoadContext | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.Loader.AssemblyLoadContext | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.Loader.AssemblyLoadContext System.Runtime.Loader.AssemblyLoadContext.CurrentContextualReflectionContext | [NullableAttribute(...)] | 0 | 2 | @@ -2555,16 +3079,21 @@ attrArgPositional | System.Runtime.Versioning.NonVersionableAttribute | [AttributeUsageAttribute(...)] | 0 | 108 | | System.Runtime.Versioning.OSPlatformAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.Versioning.OSPlatformAttribute | [NullableContextAttribute(...)] | 0 | 1 | +| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [AttributeUsageAttribute(...)] | 0 | 6143 | +| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [NullableAttribute(...)] | 0 | 0 | +| System.Runtime.Versioning.RequiresPreviewFeaturesAttribute | [NullableContextAttribute(...)] | 0 | 2 | | System.Runtime.Versioning.ResourceConsumptionAttribute | [AttributeUsageAttribute(...)] | 0 | 224 | | System.Runtime.Versioning.ResourceConsumptionAttribute | [ConditionalAttribute(...)] | 0 | RESOURCE_ANNOTATION_WORK | | System.Runtime.Versioning.ResourceExposureAttribute | [AttributeUsageAttribute(...)] | 0 | 480 | | System.Runtime.Versioning.ResourceExposureAttribute | [ConditionalAttribute(...)] | 0 | RESOURCE_ANNOTATION_WORK | -| System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 1023 | +| System.Runtime.Versioning.SupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 2047 | +| System.Runtime.Versioning.SupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | 0 | 448 | | System.Runtime.Versioning.TargetFrameworkAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | | System.Runtime.Versioning.TargetFrameworkAttribute | [NullableAttribute(...)] | 0 | 0 | | System.Runtime.Versioning.TargetFrameworkAttribute | [NullableContextAttribute(...)] | 0 | 1 | | System.Runtime.Versioning.TargetPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | -| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 1023 | +| System.Runtime.Versioning.UnsupportedOSPlatformAttribute | [AttributeUsageAttribute(...)] | 0 | 2047 | +| System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute | [AttributeUsageAttribute(...)] | 0 | 448 | | System.RuntimeType.ListBuilder`1 | [DefaultMemberAttribute(...)] | 0 | Item | | System.RuntimeTypeHandle | [NullableAttribute(...)] | 0 | 0 | | System.RuntimeTypeHandle | [NullableContextAttribute(...)] | 0 | 2 | @@ -2605,7 +3134,7 @@ attrArgPositional | System.Security.SecuritySafeCriticalAttribute | [AttributeUsageAttribute(...)] | 0 | 5500 | | System.Security.SecurityTransparentAttribute | [AttributeUsageAttribute(...)] | 0 | 1 | | System.Security.SecurityTreatAsSafeAttribute | [AttributeUsageAttribute(...)] | 0 | 5501 | -| System.Security.SecurityTreatAsSafeAttribute | [ObsoleteAttribute(...)] | 0 | SecurityTreatAsSafe is only used for .NET 2.0 transparency compatibility. Please use the SecuritySafeCriticalAttribute instead. | +| System.Security.SecurityTreatAsSafeAttribute | [ObsoleteAttribute(...)] | 0 | SecurityTreatAsSafe is only used for .NET 2.0 transparency compatibility. Use the SecuritySafeCriticalAttribute instead. | | System.Security.SuppressUnmanagedCodeSecurityAttribute | [AttributeUsageAttribute(...)] | 0 | 5188 | | System.Security.UnverifiableCodeAttribute | [AttributeUsageAttribute(...)] | 0 | 2 | | System.Security.VerificationException | [NullableAttribute(...)] | 0 | 0 | @@ -2658,7 +3187,10 @@ attrArgPositional | System.Text.EncoderReplacementFallback | [NullableContextAttribute(...)] | 0 | 1 | | System.Text.Encoding | [NullableAttribute(...)] | 0 | 0 | | System.Text.Encoding | [NullableContextAttribute(...)] | 0 | 1 | +| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| System.Text.Encoding System.Console.InputEncoding | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | | System.Text.Encoding System.Text.Encoding.UTF7 | [ObsoleteAttribute(...)] | 0 | The UTF-7 encoding is insecure and should not be used. Consider using UTF-8 instead. | | System.Text.EncodingInfo | [NullableAttribute(...)] | 0 | 0 | | System.Text.EncodingInfo | [NullableContextAttribute(...)] | 0 | 1 | @@ -2667,13 +3199,19 @@ attrArgPositional | System.Text.EncodingProvider System.Text.EncodingInfo.Provider | [NullableAttribute(...)] | 0 | 2 | | System.Text.Latin1Encoding.<>c.<>9__29_0 | [TupleElementNamesAttribute(...)] | 0 | [encoding,bytes] | | System.Text.Latin1Encoding.<>c.<>9__30_0 | [TupleElementNamesAttribute(...)] | 0 | [encoding,bytes,index] | +| System.Text.NormalizationForm.FormKC | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| System.Text.NormalizationForm.FormKD | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Text.Rune | [DebuggerDisplayAttribute(...)] | 0 | {DebuggerDisplay,nq} | +| System.Text.SpanLineEnumerator | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | +| System.Text.SpanLineEnumerator | [ObsoleteAttribute(...)] | 1 | True | | System.Text.SpanRuneEnumerator | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Text.SpanRuneEnumerator | [ObsoleteAttribute(...)] | 1 | True | | System.Text.StringBuilder | [DefaultMemberAttribute(...)] | 0 | Chars | | System.Text.StringBuilder | [NullableAttribute(...)] | 0 | 0 | | System.Text.StringBuilder | [NullableContextAttribute(...)] | 0 | 1 | | System.Text.StringBuilder | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.Text.StringBuilder.AppendInterpolatedStringHandler | [EditorBrowsableAttribute(...)] | 0 | 1 | +| System.Text.StringBuilder.AppendInterpolatedStringHandler | [NullableAttribute(...)] | 0 | 0 | | System.Text.StringBuilder.ChunkEnumerator | [NullableContextAttribute(...)] | 0 | 0 | | System.Text.UTF7Encoding | [NullableAttribute(...)] | 0 | 0 | | System.Text.UTF7Encoding | [NullableContextAttribute(...)] | 0 | 1 | @@ -2686,19 +3224,20 @@ attrArgPositional | System.Text.ValueStringBuilder | [DefaultMemberAttribute(...)] | 0 | Item | | System.Text.ValueStringBuilder | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Text.ValueStringBuilder | [ObsoleteAttribute(...)] | 1 | True | +| System.Text.ValueUtf8Converter | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | +| System.Text.ValueUtf8Converter | [ObsoleteAttribute(...)] | 1 | True | | System.ThreadStaticAttribute | [AttributeUsageAttribute(...)] | 0 | 256 | | System.Threading.AbandonedMutexException | [NullableAttribute(...)] | 0 | 0 | | System.Threading.AbandonedMutexException | [NullableContextAttribute(...)] | 0 | 2 | | System.Threading.AbandonedMutexException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| System.Threading.ApartmentState System.Threading.Thread.ApartmentState | [ObsoleteAttribute(...)] | 0 | The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState instead. | -| System.Threading.ApartmentState System.Threading.Thread.ApartmentState | [ObsoleteAttribute(...)] | 1 | False | +| System.Threading.ApartmentState System.Threading.Thread.ApartmentState | [ObsoleteAttribute(...)] | 0 | The ApartmentState property has been deprecated. Use GetApartmentState, SetApartmentState or TrySetApartmentState. | | System.Threading.AsyncLocalValueChangedArgs`1 | [NullableAttribute(...)] | 0 | 0 | | System.Threading.AsyncLocalValueChangedArgs`1 | [NullableContextAttribute(...)] | 0 | 2 | | System.Threading.AsyncLocal`1 | [NullableAttribute(...)] | 0 | 0 | | System.Threading.AsyncLocal`1 | [NullableContextAttribute(...)] | 0 | 1 | | System.Threading.CancellationToken | [DebuggerDisplayAttribute(...)] | 0 | IsCancellationRequested = {IsCancellationRequested} | | System.Threading.CancellationToken | [NullableAttribute(...)] | 0 | 0 | -| System.Threading.CancellationToken | [NullableContextAttribute(...)] | 0 | 1 | +| System.Threading.CancellationToken | [NullableContextAttribute(...)] | 0 | 2 | | System.Threading.CancellationTokenSource | [NullableAttribute(...)] | 0 | 0 | | System.Threading.CancellationTokenSource | [NullableContextAttribute(...)] | 0 | 1 | | System.Threading.CompressedStack | [NullableAttribute(...)] | 0 | 0 | @@ -2724,6 +3263,9 @@ attrArgPositional | System.Threading.Mutex | [NullableContextAttribute(...)] | 0 | 1 | | System.Threading.Overlapped | [NullableAttribute(...)] | 0 | 0 | | System.Threading.Overlapped | [NullableContextAttribute(...)] | 0 | 2 | +| System.Threading.PortableThreadPool.WaitThread System.Threading.RegisteredWaitHandle.WaitThread | [NullableAttribute(...)] | 0 | 2 | +| System.Threading.RegisteredWaitHandle | [NullableAttribute(...)] | 0 | 0 | +| System.Threading.RegisteredWaitHandle | [NullableContextAttribute(...)] | 0 | 1 | | System.Threading.RegisteredWaitHandle | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | | System.Threading.Semaphore | [NullableAttribute(...)] | 0 | 0 | | System.Threading.Semaphore | [NullableContextAttribute(...)] | 0 | 1 | @@ -2800,6 +3342,7 @@ attrArgPositional | System.Threading.Tasks.ValueTask | [NullableAttribute(...)] | 0 | 0 | | System.Threading.Tasks.ValueTask | [NullableContextAttribute(...)] | 0 | 1 | | System.Threading.Tasks.ValueTask System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Task | [NullableAttribute(...)] | 0 | [0,1] | +| System.Threading.Tasks.ValueTask System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder`1.Task | [NullableAttribute(...)] | 0 | [0,1] | | System.Threading.Tasks.ValueTask`1 | [AsyncMethodBuilderAttribute(...)] | 0 | System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1 | | System.Threading.Tasks.ValueTask`1 | [NullableAttribute(...)] | 0 | 0 | | System.Threading.Tasks.ValueTask`1 | [NullableContextAttribute(...)] | 0 | 1 | @@ -2824,21 +3367,37 @@ attrArgPositional | System.Threading.ThreadStateException | [NullableAttribute(...)] | 0 | 0 | | System.Threading.ThreadStateException | [NullableContextAttribute(...)] | 0 | 2 | | System.Threading.ThreadStateException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.Threading.Timer | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | +| System.Threading.Timer | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.TimerQueueTimer.TimerDebuggerTypeProxy | | System.Threading.Timer | [NullableAttribute(...)] | 0 | 0 | | System.Threading.Timer | [NullableContextAttribute(...)] | 0 | 1 | +| System.Threading.TimerQueue | [DebuggerDisplayAttribute(...)] | 0 | Count = {CountForDebugger} | +| System.Threading.TimerQueue | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.TimerQueue.TimerQueueDebuggerTypeProxy | +| System.Threading.TimerQueue.s_tickCountToTimeMap | [TupleElementNamesAttribute(...)] | 0 | [TickCount,Time] | +| System.Threading.TimerQueueTimer | [DebuggerDisplayAttribute(...)] | 0 | {DisplayString,nq} | +| System.Threading.TimerQueueTimer | [DebuggerTypeProxyAttribute(...)] | 0 | System.Threading.TimerQueueTimer.TimerDebuggerTypeProxy | +| System.Threading.TimerQueueTimer[] System.Threading.TimerQueue.TimerQueueDebuggerTypeProxy.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | System.Threading.Volatile | [NullableAttribute(...)] | 0 | 0 | | System.Threading.Volatile | [NullableContextAttribute(...)] | 0 | 1 | | System.Threading.WaitHandle | [NullableAttribute(...)] | 0 | 0 | | System.Threading.WaitHandle | [NullableContextAttribute(...)] | 0 | 1 | +| System.Threading.WaitHandle System.Threading.CancellationToken.WaitHandle | [NullableAttribute(...)] | 0 | 1 | | System.Threading.WaitHandle System.Threading.ManualResetEventSlim.WaitHandle | [NullableAttribute(...)] | 0 | 1 | | System.Threading.WaitHandleCannotBeOpenedException | [NullableAttribute(...)] | 0 | 0 | | System.Threading.WaitHandleCannotBeOpenedException | [NullableContextAttribute(...)] | 0 | 2 | | System.Threading.WaitHandleCannotBeOpenedException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.Threading.WaitHandleExtensions | [NullableAttribute(...)] | 0 | 0 | | System.Threading.WaitHandleExtensions | [NullableContextAttribute(...)] | 0 | 1 | +| System.TimeOnly System.TimeOnly.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.TimeOnly System.TimeOnly.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.TimeSpan System.DateTime.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.TimeSpan System.DateTimeOffset.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.TimeSpan System.TimeSpan.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.TimeSpan System.TimeSpan.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.TimeSpan System.TimeSpan.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.TimeZone | [NullableAttribute(...)] | 0 | 0 | | System.TimeZone | [NullableContextAttribute(...)] | 0 | 1 | -| System.TimeZone | [ObsoleteAttribute(...)] | 0 | System.TimeZone has been deprecated. Please investigate the use of System.TimeZoneInfo instead. | +| System.TimeZone | [ObsoleteAttribute(...)] | 0 | System.TimeZone has been deprecated. Investigate the use of System.TimeZoneInfo instead. | | System.TimeZoneInfo | [NullableAttribute(...)] | 0 | 0 | | System.TimeZoneInfo | [NullableContextAttribute(...)] | 0 | 1 | | System.TimeZoneInfo | [TypeForwardedFromAttribute(...)] | 0 | System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -2898,10 +3457,13 @@ attrArgPositional | System.Type System.Reflection.FieldInfo.FieldType | [NullableAttribute(...)] | 0 | 1 | | System.Type System.Reflection.MemberInfo.DeclaringType | [NullableAttribute(...)] | 0 | 2 | | System.Type System.Reflection.MemberInfo.ReflectedType | [NullableAttribute(...)] | 0 | 2 | +| System.Type System.Reflection.Metadata.MetadataUpdateHandlerAttribute.HandlerType | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | | System.Type System.Reflection.PropertyInfo.PropertyType | [NullableAttribute(...)] | 0 | 1 | | System.Type System.Reflection.TypeDelegator.BaseType | [NullableAttribute(...)] | 0 | 2 | | System.Type System.Resources.ResourceManager.ResourceManagerMediator.UserResourceSet | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | | System.Type System.Resources.ResourceManager.ResourceSetType | [DynamicallyAccessedMembersAttribute(...)] | 0 | 7 | +| System.Type System.Runtime.InteropServices.ComEventInterfaceAttribute.EventProvider | [DynamicallyAccessedMembersAttribute(...)] | 0 | 2607 | +| System.Type System.Runtime.InteropServices.ComEventInterfaceAttribute.SourceInterface | [DynamicallyAccessedMembersAttribute(...)] | 0 | 8 | | System.Type System.Type.BaseType | [NullableAttribute(...)] | 0 | 2 | | System.Type System.Type.DeclaringType | [NullableAttribute(...)] | 0 | 2 | | System.Type System.Type.ReflectedType | [NullableAttribute(...)] | 0 | 2 | @@ -2923,6 +3485,12 @@ attrArgPositional | System.TypedReference | [NullableContextAttribute(...)] | 0 | 1 | | System.UIntPtr | [CLSCompliantAttribute(...)] | 0 | False | | System.UIntPtr | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.UIntPtr System.UIntPtr.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.UIntPtr System.UIntPtr.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.UIntPtr System.UIntPtr.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.UIntPtr System.UIntPtr.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.UIntPtr System.UIntPtr.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| System.UIntPtr System.UIntPtr.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | System.UnauthorizedAccessException | [NullableAttribute(...)] | 0 | 0 | | System.UnauthorizedAccessException | [NullableContextAttribute(...)] | 0 | 2 | | System.UnauthorizedAccessException | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -2931,6 +3499,8 @@ attrArgPositional | System.ValueTuple | [NullableAttribute(...)] | 0 | 0 | | System.ValueTuple | [NullableContextAttribute(...)] | 0 | 1 | | System.ValueTuple | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| System.ValueTuple System.Runtime.DependentHandle.TargetAndDependent | [NullableAttribute(...)] | 0 | [0,2,2] | +| System.ValueTuple System.Runtime.DependentHandle.TargetAndDependent | [TupleElementNamesAttribute(...)] | 0 | [Target,Dependent] | | System.ValueTuple`1 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | System.ValueTuple`1.Item1 | [NullableAttribute(...)] | 0 | 1 | | System.ValueTuple`2 | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | @@ -2977,18 +3547,38 @@ attrArgPositional | bool | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | bool System.Console.CapsLock | [SupportedOSPlatformAttribute(...)] | 0 | windows | | bool System.Console.NumberLock | [SupportedOSPlatformAttribute(...)] | 0 | windows | +| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| bool System.Console.TreatControlCAsInput | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | | bool System.Reflection.Assembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | 0 | The Global Assembly Cache is not supported. | -| bool System.Reflection.Emit.AssemblyBuilder.GlobalAssemblyCache | [ObsoleteAttribute(...)] | 0 | The Global Assembly Cache is not supported. | | bool System.Reflection.RuntimeAssembly.GlobalAssemblyCache | [ObsoleteAttribute(...)] | 0 | The Global Assembly Cache is not supported. | +| bool System.Threading.Thread.IsThreadStartSupported | [UnsupportedOSPlatformGuardAttribute(...)] | 0 | browser | | bool.FalseString | [NullableAttribute(...)] | 0 | 1 | | bool.TrueString | [NullableAttribute(...)] | 0 | 1 | | byte | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| byte byte.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| byte byte.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| byte byte.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| byte byte.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| byte byte.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| byte byte.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | byte* System.IO.UnmanagedMemoryStream.PositionPointer | [CLSCompliantAttribute(...)] | 0 | False | -| char | [NullableAttribute(...)] | 0 | 0 | -| char | [NullableContextAttribute(...)] | 0 | 1 | | char | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| char char.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| char char.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| char char.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| char char.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| char char.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| char char.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | decimal | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| decimal decimal.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| decimal decimal.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| decimal decimal.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| decimal decimal.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| decimal decimal.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| decimal decimal.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| decimal decimal.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | decimal.MaxValue | [DecimalConstantAttribute(...)] | 0 | 0 | | decimal.MaxValue | [DecimalConstantAttribute(...)] | 1 | 0 | | decimal.MaxValue | [DecimalConstantAttribute(...)] | 2 | 4294967295 | @@ -3015,16 +3605,73 @@ attrArgPositional | decimal.Zero | [DecimalConstantAttribute(...)] | 3 | 0 | | decimal.Zero | [DecimalConstantAttribute(...)] | 4 | 0 | | double | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| double System.TimeSpan.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.E | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.Epsilon | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.NaN | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.NegativeInfinity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.NegativeZero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.Pi | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.PositiveInfinity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.Tau | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| double double.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | float | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| float float.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.E | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.Epsilon | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.NaN | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.NegativeInfinity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.NegativeZero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.Pi | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.PositiveInfinity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.Tau | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| float float.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | int | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| int System.Console.CursorLeft | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | +| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| int System.Console.CursorTop | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | +| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | +| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| int System.Console.LargestWindowHeight | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | +| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | android | | int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | browser | -| int System.Threading.Overlapped.EventHandle | [ObsoleteAttribute(...)] | 0 | This property is not 64-bit compatible. Use EventHandleIntPtr instead. http://go.microsoft.com/fwlink/?linkid=14202 | +| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | ios | +| int System.Console.LargestWindowWidth | [UnsupportedOSPlatformAttribute(...)] | 0 | tvos | +| int System.Threading.Overlapped.EventHandle | [ObsoleteAttribute(...)] | 0 | Overlapped.EventHandle is not 64-bit compatible and has been deprecated. Use EventHandleIntPtr instead. | +| int int.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| int int.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| int int.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| int int.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| int int.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| int int.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| int int.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | int[] System.Globalization.HebrewCalendar.Eras | [NullableAttribute(...)] | 0 | 1 | | int[] System.Globalization.StringInfo.Indexes | [NullableAttribute(...)] | 0 | 2 | | long | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| long long.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| long long.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| long long.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| long long.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| long long.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| long long.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| long long.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | object | [ClassInterfaceAttribute(...)] | 0 | 1 | | object | [ComVisibleAttribute(...)] | 0 | True | | object | [NullableContextAttribute(...)] | 0 | 2 | @@ -3045,6 +3692,7 @@ attrArgPositional | object System.Collections.Generic.HashSet`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | | object System.Collections.Generic.List`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | | object System.Collections.Generic.List`1.Item | [NullableAttribute(...)] | 0 | 2 | +| object System.Collections.Generic.Queue`1.Enumerator.Current | [NullableAttribute(...)] | 0 | 2 | | object System.Collections.Hashtable.Item | [NullableAttribute(...)] | 0 | 2 | | object System.Collections.IDictionary.Item | [NullableAttribute(...)] | 0 | 2 | | object System.Collections.IDictionaryEnumerator.Value | [NullableAttribute(...)] | 0 | 2 | @@ -3053,6 +3701,7 @@ attrArgPositional | object System.Collections.ObjectModel.ReadOnlyCollection`1.Item | [NullableAttribute(...)] | 0 | 2 | | object System.Delegate.Target | [NullableAttribute(...)] | 0 | 2 | | object System.IAsyncResult.AsyncState | [NullableAttribute(...)] | 0 | 2 | +| object System.IO.Enumeration.FileSystemEnumerator`1.Current | [NullableAttribute(...)] | 0 | 2 | | object System.Reflection.CustomAttributeTypedArgument.Value | [NullableAttribute(...)] | 0 | 2 | | object System.Reflection.ParameterInfo.DefaultValue | [NullableAttribute(...)] | 0 | 2 | | object System.Reflection.ParameterInfo.RawDefaultValue | [NullableAttribute(...)] | 0 | 2 | @@ -3083,7 +3732,21 @@ attrArgPositional | object[] System.Collections.ArrayList.ArrayListDebugView.Items | [DebuggerBrowsableAttribute(...)] | 0 | 3 | | sbyte | [CLSCompliantAttribute(...)] | 0 | False | | sbyte | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| sbyte sbyte.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| sbyte sbyte.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| sbyte sbyte.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| sbyte sbyte.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| sbyte sbyte.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| sbyte sbyte.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| sbyte sbyte.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | short | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| short short.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| short short.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| short short.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| short short.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| short short.NegativeOne | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| short short.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| short short.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | string | [DefaultMemberAttribute(...)] | 0 | Chars | | string | [NullableAttribute(...)] | 0 | 0 | | string | [NullableContextAttribute(...)] | 0 | 1 | @@ -3106,21 +3769,30 @@ attrArgPositional | string System.Diagnostics.DebuggerDisplayAttribute.Value | [NullableAttribute(...)] | 0 | 1 | | string System.Diagnostics.DebuggerTypeProxyAttribute.ProxyTypeName | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | | string System.Diagnostics.DebuggerTypeProxyAttribute.ProxyTypeName | [NullableAttribute(...)] | 0 | 1 | +| string System.Diagnostics.DebuggerVisualizerAttribute.VisualizerObjectSourceTypeName | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | +| string System.Diagnostics.DebuggerVisualizerAttribute.VisualizerTypeName | [DynamicallyAccessedMembersAttribute(...)] | 0 | -1 | | string System.Diagnostics.DebuggerVisualizerAttribute.VisualizerTypeName | [NullableAttribute(...)] | 0 | 1 | | string System.Diagnostics.Tracing.EventFieldAttribute.Name | [NullableAttribute(...)] | 0 | 2 | | string System.Diagnostics.Tracing.EventSource.Name | [NullableAttribute(...)] | 0 | 1 | | string System.Diagnostics.Tracing.TraceLoggingEventTypes.Name | [NullableAttribute(...)] | 0 | 1 | +| string System.Environment.ProcessPath | [NullableAttribute(...)] | 0 | 2 | | string System.Exception.Message | [NullableAttribute(...)] | 0 | 1 | | string System.Globalization.CultureNotFoundException.DefaultMessage | [NullableAttribute(...)] | 0 | 1 | | string System.Globalization.CultureNotFoundException.Message | [NullableAttribute(...)] | 0 | 1 | +| string System.IO.FileInfo.DirectoryName | [NullableAttribute(...)] | 0 | 2 | | string System.IO.FileLoadException.Message | [NullableAttribute(...)] | 0 | 1 | | string System.IO.FileNotFoundException.Message | [NullableAttribute(...)] | 0 | 1 | +| string System.IO.FileSystemInfo.LinkTarget | [NullableAttribute(...)] | 0 | 2 | | string System.MissingMemberException.Message | [NullableAttribute(...)] | 0 | 1 | | string System.Reflection.Assembly.CodeBase | [NullableAttribute(...)] | 0 | 2 | +| string System.Reflection.Assembly.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | +| string System.Reflection.Assembly.EscapedCodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | | string System.Reflection.Assembly.FullName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.AssemblyMetadataAttribute.Value | [NullableAttribute(...)] | 0 | 2 | +| string System.Reflection.AssemblyName.EscapedCodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | The code will return an empty string for assemblies embedded in a single-file app | | string System.Reflection.AssemblyName.FullName | [NullableAttribute(...)] | 0 | 1 | | string System.Reflection.Emit.AssemblyBuilder.CodeBase | [NullableAttribute(...)] | 0 | 2 | +| string System.Reflection.Emit.AssemblyBuilder.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | | string System.Reflection.Emit.AssemblyBuilder.FullName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.Emit.EnumBuilder.AssemblyQualifiedName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.Emit.EnumBuilder.FullName | [NullableAttribute(...)] | 0 | 2 | @@ -3128,10 +3800,18 @@ attrArgPositional | string System.Reflection.Emit.GenericTypeParameterBuilder.AssemblyQualifiedName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.Emit.GenericTypeParameterBuilder.FullName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.Emit.GenericTypeParameterBuilder.Namespace | [NullableAttribute(...)] | 0 | 2 | +| string System.Reflection.Emit.InternalAssemblyBuilder.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | +| string System.Reflection.Emit.ModuleBuilder.FullyQualifiedName | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns for modules with no file path | +| string System.Reflection.Emit.ModuleBuilder.Name | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns for modules with no file path | | string System.Reflection.Emit.TypeBuilder.AssemblyQualifiedName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.Emit.TypeBuilder.FullName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.Emit.TypeBuilder.Namespace | [NullableAttribute(...)] | 0 | 2 | +| string System.Reflection.Module.FullyQualifiedName | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns for modules with no file path | +| string System.Reflection.Module.Name | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns for modules with no file path | | string System.Reflection.ParameterInfo.Name | [NullableAttribute(...)] | 0 | 2 | +| string System.Reflection.RuntimeAssembly.CodeBase | [RequiresAssemblyFilesAttribute(...)] | 0 | This member throws an exception for assemblies embedded in a single-file app | +| string System.Reflection.RuntimeModule.FullyQualifiedName | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns for modules with no file path | +| string System.Reflection.RuntimeModule.Name | [RequiresAssemblyFilesAttribute(...)] | 0 | Returns for modules with no file path | | string System.Reflection.TypeDelegator.AssemblyQualifiedName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.TypeDelegator.FullName | [NullableAttribute(...)] | 0 | 2 | | string System.Reflection.TypeDelegator.Namespace | [NullableAttribute(...)] | 0 | 2 | @@ -3151,10 +3831,28 @@ attrArgPositional | uint | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | uint System.Reflection.AssemblyAlgorithmIdAttribute.AlgorithmId | [CLSCompliantAttribute(...)] | 0 | False | | uint System.Reflection.AssemblyFlagsAttribute.Flags | [CLSCompliantAttribute(...)] | 0 | False | -| uint System.Reflection.AssemblyFlagsAttribute.Flags | [ObsoleteAttribute(...)] | 0 | This property has been deprecated. Please use AssemblyFlags instead. https://go.microsoft.com/fwlink/?linkid=14202 | +| uint System.Reflection.AssemblyFlagsAttribute.Flags | [ObsoleteAttribute(...)] | 0 | AssemblyFlagsAttribute.Flags has been deprecated. Use AssemblyFlags instead. | +| uint uint.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| uint uint.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| uint uint.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| uint uint.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| uint uint.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| uint uint.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | ulong | [CLSCompliantAttribute(...)] | 0 | False | | ulong | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | | ulong System.Runtime.InteropServices.SafeBuffer.ByteLength | [CLSCompliantAttribute(...)] | 0 | False | +| ulong ulong.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ulong ulong.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ulong ulong.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ulong ulong.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ulong ulong.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ulong ulong.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | ushort | [CLSCompliantAttribute(...)] | 0 | False | | ushort | [TypeForwardedFromAttribute(...)] | 0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| ushort ushort.AdditiveIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ushort ushort.MaxValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ushort ushort.MinValue | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ushort ushort.MultiplicativeIdentity | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ushort ushort.One | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | +| ushort ushort.Zero | [RequiresPreviewFeaturesAttribute(...)] | 0 | Generic Math is in preview. | | void* System.Buffers.MemoryHandle.Pointer | [CLSCompliantAttribute(...)] | 0 | False | diff --git a/csharp/ql/test/library-tests/cil/attributes/attribute.ql b/csharp/ql/test/library-tests/cil/attributes/attribute.ql index ce5ed1e1daf..066bb26d9b7 100644 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.ql +++ b/csharp/ql/test/library-tests/cil/attributes/attribute.ql @@ -1,7 +1,14 @@ import semmle.code.cil.Attribute import semmle.code.cil.Declaration -private predicate isOsSpecific(Declaration d) { d.getQualifiedName().matches("%libobjc%") } +private predicate isOsSpecific(Declaration d) { + d.getQualifiedName() + .matches("%" + + [ + "libobjc", "libproc", "System.Diagnostics.Tracing.XplatEventLogger", + "System.Threading.AutoreleasePool" + ] + "%") +} query predicate attrNoArg(string dec, string attr) { exists(Declaration d, Attribute a | diff --git a/csharp/ql/test/library-tests/cil/consistency/consistency.expected b/csharp/ql/test/library-tests/cil/consistency/consistency.expected index 7013329175d..ef5579d1369 100644 --- a/csharp/ql/test/library-tests/cil/consistency/consistency.expected +++ b/csharp/ql/test/library-tests/cil/consistency/consistency.expected @@ -1,3 +1,10 @@ | Finalize | Overridden method from System.Object is not in a base type | -| System.Int32 System.Text.UnicodeEncoding.GetByteCount(System.Char*,System.Int32,System.Text.EncoderNLS): dup, ldarg.2 [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; shl [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; bge.s [push: 0, pop: 2]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 0]; newobj [push: 1, pop: 2]; throw [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldarg.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; stloc.2 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brfalse [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; stloc.3 [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; brfalse [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; call [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; call [push: 1, pop: 1]; call [push: 1, pop: 3]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; br [push: 0, pop: 0]; ldloc.s [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldsfld [push: 1, pop: 0]; xor [push: 1, pop: 2]; brfalse [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; ldc.i4.7 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldloc.2 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldc.i8 [push: 1, pop: 0]; xor [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldsfld [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; br.s [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; bne.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; blt.un [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; bge.un [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldind.u2 [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; blt [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt.s [push: 0, pop: 2]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.s [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | -| System.Int32 System.Text.UnicodeEncoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32,System.Text.EncoderNLS): dup, ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.2 [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.3 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldarg.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brfalse [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; brfalse [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; call [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; call [push: 1, pop: 1]; call [push: 1, pop: 3]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; br [push: 0, pop: 0]; ldloc.1 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldsfld [push: 1, pop: 0]; xor [push: 1, pop: 2]; brfalse [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; ldc.i4.7 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; shr [push: 1, pop: 2]; ldloc.s [push: 1, pop: 0]; ldarg.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; blt.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldarg.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; shr [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; mul [push: 1, pop: 2]; conv.i [push: 1, pop: 1]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldc.i8 [push: 1, pop: 0]; xor [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldsfld [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; br.s [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; bne.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; call [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; blt.un [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; bge.un [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldind.u2 [push: 1, pop: 1]; stloc.1 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; blt [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.1 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; add [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; blt.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ceq [push: 1, pop: 2]; call [push: 0, pop: 3]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; blt.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ceq [push: 1, pop: 2]; call [push: 0, pop: 3]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | +| System.Int32 System.Math.Sign(System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; ldc.i4.s [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldarg.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | +| System.Int32 System.Runtime.InteropServices.Marshal.AddRef(System.IntPtr): calli, ldarg.0 [push: 1, pop: 0]; ldsfld [push: 1, pop: 0]; call [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldstr [push: 1, pop: 0]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; call [push: 1, pop: 1]; ldind.i [push: 1, pop: 1]; sizeof [push: 1, pop: 0]; add [push: 1, pop: 2]; ldind.i [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; calli [push: 1, pop: 2] | Expression is missing getType() | +| System.Int32 System.Runtime.InteropServices.Marshal.QueryInterface(System.IntPtr,System.Guid,System.IntPtr): calli, ldarg.0 [push: 1, pop: 0]; ldsfld [push: 1, pop: 0]; call [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldstr [push: 1, pop: 0]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.2 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; conv.u [push: 1, pop: 1]; stloc.2 [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; call [push: 1, pop: 1]; ldind.i [push: 1, pop: 1]; ldind.i [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; calli [push: 1, pop: 4] | Expression is missing getType() | +| System.Int32 System.Runtime.InteropServices.Marshal.Release(System.IntPtr): calli, ldarg.0 [push: 1, pop: 0]; ldsfld [push: 1, pop: 0]; call [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldstr [push: 1, pop: 0]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; call [push: 1, pop: 1]; ldind.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; sizeof [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; ldind.i [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; calli [push: 1, pop: 2] | Expression is missing getType() | +| System.Int32 System.Text.UnicodeEncoding.GetByteCount(System.Char*,System.Int32,System.Text.EncoderNLS): dup, ldarg.2 [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; shl [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; bge.s [push: 0, pop: 2]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 0]; newobj [push: 1, pop: 2]; throw [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.1 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldarg.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; stloc.2 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brfalse [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; stloc.3 [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; brfalse [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; call [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; call [push: 1, pop: 1]; call [push: 1, pop: 3]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; br [push: 0, pop: 0]; ldloc.s [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldsfld [push: 1, pop: 0]; xor [push: 1, pop: 2]; brfalse [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; ldc.i4.7 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue [push: 0, pop: 1]; ldloc.3 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldloc.2 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldc.i8 [push: 1, pop: 0]; xor [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldsfld [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; bne.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; blt.un [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; bge.un [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldind.u2 [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; blt [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt.s [push: 0, pop: 2]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.s [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloc.2 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.3 [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | +| System.Int32 System.Text.UnicodeEncoding.GetBytes(System.Char*,System.Int32,System.Byte*,System.Int32,System.Text.EncoderNLS): dup, ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.2 [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.3 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldarg.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brfalse [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; brfalse [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; call [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; call [push: 1, pop: 1]; call [push: 1, pop: 3]; newobj [push: 1, pop: 1]; throw [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; br [push: 0, pop: 0]; ldloc.1 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldsfld [push: 1, pop: 0]; xor [push: 1, pop: 2]; brfalse [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; ldc.i4.7 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brtrue [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; shr [push: 1, pop: 2]; ldloc.s [push: 1, pop: 0]; ldarg.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; blt.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldarg.1 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldloc.3 [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; sub [push: 1, pop: 2]; ldc.i4.1 [push: 1, pop: 0]; div [push: 1, pop: 2]; conv.i8 [push: 1, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; shr [push: 1, pop: 2]; ldc.i4.2 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; mul [push: 1, pop: 2]; conv.i [push: 1, pop: 1]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldc.i8 [push: 1, pop: 0]; xor [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i8 [push: 1, pop: 0]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.u8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; conv.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; and [push: 1, pop: 2]; ldsfld [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldc.i8 [push: 1, pop: 0]; bne.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldind.i8 [push: 1, pop: 1]; call [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; add [push: 1, pop: 2]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; blt.un [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; bge.un [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldind.u2 [push: 1, pop: 1]; stloc.1 [push: 0, pop: 1]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; blt [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt [push: 0, pop: 2]; ldloc.1 [push: 1, pop: 0]; ldc.i4 [push: 1, pop: 0]; bgt.s [push: 0, pop: 2]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.1 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.1 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; br [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.3 [push: 1, pop: 0]; add [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; blt.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; conv.i [push: 1, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; mul [push: 1, pop: 2]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ceq [push: 1, pop: 2]; call [push: 0, pop: 3]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; ble.s [push: 0, pop: 2]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.s [push: 1, pop: 0]; brtrue.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; callvirt [push: 0, pop: 5]; ldarg.1 [push: 1, pop: 0]; stloc.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldloc.0 [push: 1, pop: 0]; ldloca.s [push: 1, pop: 0]; callvirt [push: 1, pop: 3]; pop [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; starg.s [push: 0, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; stloc.0 [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; ldloc.3 [push: 1, pop: 0]; blt.un.s [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; pop [push: 0, pop: 1]; br.s [push: 0, pop: 0]; ldarg.1 [push: 1, pop: 0]; ldc.i4.2 [push: 1, pop: 0]; sub [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldarg.0 [push: 1, pop: 0]; ldarg.s [push: 1, pop: 0]; ldarg.3 [push: 1, pop: 0]; ldloc.s [push: 1, pop: 0]; ceq [push: 1, pop: 2]; call [push: 0, pop: 3]; br.s [push: 0, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; brfalse.s [push: 0, pop: 1]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; br.s [push: 0, pop: 0]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldarg.3 [push: 1, pop: 0]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; add [push: 1, pop: 2]; starg.s [push: 0, pop: 1]; ldloc.1 [push: 1, pop: 0]; ldc.i4.8 [push: 1, pop: 0]; shr [push: 1, pop: 2]; conv.u1 [push: 1, pop: 1]; stind.i1 [push: 0, pop: 2]; ldloc.s [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.s [push: 1, pop: 0]; callvirt [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldc.i4.0 [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | +| System.IntPtr System.IntPtr.op_UnaryNegation(System.IntPtr): neg, ldarg.0 [push: 1, pop: 0]; neg [push: 1, pop: 1] | Expression is missing getType() | +| System.String System.Threading.TimerQueueTimer.get_DisplayString(): dup, ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.s [push: 1, pop: 0]; newarr [push: 1, pop: 1]; dup [push: 2, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldc.i4.m1 [push: 1, pop: 0]; beq.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; conv.r.un [push: 1, pop: 1]; conv.r8 [push: 1, pop: 1]; call [push: 1, pop: 1]; box [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | +| System.String System.Threading.TimerQueueTimer.get_DisplayString(): dup, ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; callvirt [push: 1, pop: 1]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; stloc.0 [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; brfalse.s [push: 0, pop: 1]; ldloc.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; call [push: 1, pop: 2]; stloc.0 [push: 0, pop: 1]; ldc.i4.s [push: 1, pop: 0]; newarr [push: 1, pop: 1]; dup [push: 2, pop: 1]; ldc.i4.0 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.1 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldc.i4.m1 [push: 1, pop: 0]; beq.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; conv.r.un [push: 1, pop: 1]; conv.r8 [push: 1, pop: 1]; call [push: 1, pop: 1]; box [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1]; brtrue.s [push: 0, pop: 1]; pop [push: 0, pop: 1]; ldnull [push: 1, pop: 0]; br.s [push: 0, pop: 0]; callvirt [push: 1, pop: 1]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.2 [push: 1, pop: 0]; ldstr [push: 1, pop: 0]; stelem.ref [push: 0, pop: 3]; dup [push: 2, pop: 1]; ldc.i4.3 [push: 1, pop: 0]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; ldc.i4.m1 [push: 1, pop: 0]; beq.s [push: 0, pop: 2]; ldarg.0 [push: 1, pop: 0]; ldfld [push: 1, pop: 1]; conv.r.un [push: 1, pop: 1]; conv.r8 [push: 1, pop: 1]; call [push: 1, pop: 1]; box [push: 1, pop: 1]; br.s [push: 0, pop: 0]; ldstr [push: 1, pop: 0]; dup [push: 2, pop: 1] | Expression is missing getType() | diff --git a/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected b/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected index e71d177d5ef..1e98c1e6c61 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected +++ b/csharp/ql/test/library-tests/cil/dataflow/CallableReturns.expected @@ -11,8 +11,8 @@ alwaysNonNull | System.ArgumentException System.ThrowHelper.GetAddingDuplicateWithKeyArgumentException(System.Object) | | System.ArgumentException System.ThrowHelper.GetWrongKeyTypeArgumentException(System.Object,System.Type) | | System.ArgumentException System.ThrowHelper.GetWrongValueTypeArgumentException(System.Object,System.Type) | -| System.ArgumentNullException System.ThrowHelper.GetArgumentNullException(System.ExceptionArgument) | | System.Collections.Generic.KeyNotFoundException System.ThrowHelper.GetKeyNotFoundException(System.Object) | +| System.Exception System.ThrowHelper.CreateEndOfFileException() | | System.Exception System.ThrowHelper.GetArraySegmentCtorValidationFailedException(System.Array,System.Int32,System.Int32) | | System.InvalidOperationException System.ThrowHelper.GetInvalidOperationException_EnumCurrent(System.Int32) | | System.Object Dataflow.NonNullMethods.ReturnsNonNull2() | @@ -35,26 +35,35 @@ alwaysThrows | System.Object Dataflow.ThrowingMethods.get_ThrowProperty() | System.Exception | 0: newobj System.Exception..ctor, 1: throw | | System.Object Dataflow.ThrowingMethods.get_VirtualThrowProperty() | System.Exception | 0: newobj System.Exception..ctor, 1: throw | | System.Object System.ValueTuple.get_Item(System.Int32) | System.IndexOutOfRangeException | 0: newobj System.IndexOutOfRangeException..ctor, 1: throw | +| System.Void System.ThrowHelper.ArgumentOutOfRangeException_Enum_Value() | System.ArgumentOutOfRangeException | 0: ldstr "value", 1: call System.SR.get_ArgumentOutOfRange_Enum, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException`1(!0) | System.ArgumentException | 0: ldarg.0, 1: box, 2: call System.ThrowHelper.GetAddingDuplicateWithKeyArgumentException, 3: throw | | System.Void System.ThrowHelper.ThrowAggregateException(System.Collections.Generic.List) | System.AggregateException | 0: ldarg.0, 1: newobj System.AggregateException..ctor, 2: throw | | System.Void System.ThrowHelper.ThrowArgumentException_Argument_InvalidArrayType() | System.ArgumentException | 0: call System.SR.get_Argument_InvalidArrayType, 1: newobj System.ArgumentException..ctor, 2: throw | | System.Void System.ThrowHelper.ThrowArgumentException_BadComparer(System.Object) | System.ArgumentException | 0: call System.SR.get_Arg_BogusIComparer, 1: ldarg.0, 2: call System.SR.Format, 3: newobj System.ArgumentException..ctor, 4: throw | | System.Void System.ThrowHelper.ThrowArgumentException_CannotExtractScalar(System.ExceptionArgument) | System.ArgumentException | 0: ldc.i4.s 31, 1: ldarg.0, 2: call System.ThrowHelper.GetArgumentException, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentException_DestinationTooShort() | System.ArgumentException | 0: call System.SR.get_Argument_DestinationTooShort, 1: ldstr "destination", 2: newobj System.ArgumentException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowArgumentException_HandleNotAsync(System.String) | System.ArgumentException | 0: call System.SR.get_Arg_HandleNotAsync, 1: ldarg.0, 2: newobj System.ArgumentException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowArgumentException_HandleNotSync(System.String) | System.ArgumentException | 0: call System.SR.get_Arg_HandleNotSync, 1: ldarg.0, 2: newobj System.ArgumentException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowArgumentException_InvalidHandle(System.String) | System.ArgumentException | 0: call System.SR.get_Arg_InvalidHandle, 1: ldarg.0, 2: newobj System.ArgumentException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentException_OverlapAlignmentMismatch() | System.ArgumentException | 0: call System.SR.get_Argument_OverlapAlignmentMismatch, 1: newobj System.ArgumentException..ctor, 2: throw | -| System.Void System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument) | System.ArgumentNullException | 0: ldarg.0, 1: call System.ThrowHelper.GetArgumentNullException, 2: throw | +| System.Void System.ThrowHelper.ThrowArgumentException_TupleIncorrectType(System.Object) | System.ArgumentException | 0: call System.SR.get_ArgumentException_ValueTupleIncorrectType, 1: ldarg.0, 2: callvirt System.Object.GetType, 3: call System.SR.Format, 4: ldstr "other", 5: newobj System.ArgumentException..ctor, 6: throw | +| System.Void System.ThrowHelper.ThrowArgumentNullException(System.ExceptionArgument) | System.ArgumentNullException | 0: ldarg.0, 1: call System.ThrowHelper.GetArgumentName, 2: newobj System.ArgumentNullException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException() | System.ArgumentOutOfRangeException | 0: newobj System.ArgumentOutOfRangeException..ctor, 1: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException(System.ExceptionArgument) | System.ArgumentOutOfRangeException | 0: ldarg.0, 1: call System.ThrowHelper.GetArgumentName, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_NeedNonNegNum(System.String) | System.ArgumentOutOfRangeException | 0: ldarg.0, 1: call System.SR.get_ArgumentOutOfRange_NeedNonNegNum, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_PrecisionTooLarge() | System.ArgumentOutOfRangeException | 0: ldstr "precision", 1: call System.SR.get_Argument_PrecisionTooLarge, 2: ldc.i4.s 31, 3: box, 4: call System.SR.Format, 5: newobj System.ArgumentOutOfRangeException..ctor, 6: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRangeException_SymbolDoesNotFit() | System.ArgumentOutOfRangeException | 0: ldstr "symbol", 1: call System.SR.get_Argument_BadFormatSpecifier, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRange_BadHourMinuteSecond() | System.ArgumentOutOfRangeException | 0: ldnull, 1: call System.SR.get_ArgumentOutOfRange_BadHourMinuteSecond, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRange_BadYearMonthDay() | System.ArgumentOutOfRangeException | 0: ldnull, 1: call System.SR.get_ArgumentOutOfRange_BadYearMonthDay, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_DayNumber(System.Int32) | System.ArgumentOutOfRangeException | 0: ldstr "dayNumber", 1: ldarg.0, 2: box, 3: call System.SR.get_ArgumentOutOfRange_DayNumber, 4: newobj System.ArgumentOutOfRangeException..ctor, 5: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRange_IndexException() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.0, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | +| System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Month(System.Int32) | System.ArgumentOutOfRangeException | 0: ldstr "month", 1: ldarg.0, 2: box, 3: call System.SR.get_ArgumentOutOfRange_Month, 4: newobj System.ArgumentOutOfRangeException..ctor, 5: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRange_TimeSpanTooLong() | System.ArgumentOutOfRangeException | 0: ldnull, 1: call System.SR.get_Overflow_TimeSpanTooLong, 2: newobj System.ArgumentOutOfRangeException..ctor, 3: throw | | System.Void System.ThrowHelper.ThrowArgumentOutOfRange_Year() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.4, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | | System.Void System.ThrowHelper.ThrowArraySegmentCtorValidationFailedExceptions(System.Array,System.Int32,System.Int32) | System.Exception | 0: ldarg.0, 1: ldarg.1, 2: ldarg.2, 3: call System.ThrowHelper.GetArraySegmentCtorValidationFailedException, 4: throw | | System.Void System.ThrowHelper.ThrowArrayTypeMismatchException() | System.ArrayTypeMismatchException | 0: newobj System.ArrayTypeMismatchException..ctor, 1: throw | | System.Void System.ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.3, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | +| System.Void System.ThrowHelper.ThrowEndOfFileException() | System.Exception | 0: call System.ThrowHelper.CreateEndOfFileException, 1: throw | | System.Void System.ThrowHelper.ThrowFormatException_BadFormatSpecifier() | System.FormatException | 0: call System.SR.get_Argument_BadFormatSpecifier, 1: newobj System.FormatException..ctor, 2: throw | | System.Void System.ThrowHelper.ThrowIndexArgumentOutOfRange_NeedNonNegNumException() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.s 31, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | | System.Void System.ThrowHelper.ThrowIndexOutOfRangeException() | System.IndexOutOfRangeException | 0: newobj System.IndexOutOfRangeException..ctor, 1: throw | @@ -72,6 +81,12 @@ alwaysThrows | System.Void System.ThrowHelper.ThrowKeyNotFoundException`1(!0) | System.Collections.Generic.KeyNotFoundException | 0: ldarg.0, 1: box, 2: call System.ThrowHelper.GetKeyNotFoundException, 3: throw | | System.Void System.ThrowHelper.ThrowLengthArgumentOutOfRange_ArgumentOutOfRange_NeedNonNegNum() | System.ArgumentOutOfRangeException | 0: ldc.i4.s 31, 1: ldc.i4.s 31, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | | System.Void System.ThrowHelper.ThrowNotSupportedException() | System.NotSupportedException | 0: newobj System.NotSupportedException..ctor, 1: throw | +| System.Void System.ThrowHelper.ThrowNotSupportedException_UnreadableStream() | System.NotSupportedException | 0: call System.SR.get_NotSupported_UnreadableStream, 1: newobj System.NotSupportedException..ctor, 2: throw | +| System.Void System.ThrowHelper.ThrowNotSupportedException_UnseekableStream() | System.NotSupportedException | 0: call System.SR.get_NotSupported_UnseekableStream, 1: newobj System.NotSupportedException..ctor, 2: throw | +| System.Void System.ThrowHelper.ThrowNotSupportedException_UnwritableStream() | System.NotSupportedException | 0: call System.SR.get_NotSupported_UnwritableStream, 1: newobj System.NotSupportedException..ctor, 2: throw | +| System.Void System.ThrowHelper.ThrowObjectDisposedException_FileClosed() | System.ObjectDisposedException | 0: ldnull, 1: call System.SR.get_ObjectDisposed_FileClosed, 2: newobj System.ObjectDisposedException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowObjectDisposedException_StreamClosed(System.String) | System.ObjectDisposedException | 0: ldarg.0, 1: call System.SR.get_ObjectDisposed_StreamClosed, 2: newobj System.ObjectDisposedException..ctor, 3: throw | +| System.Void System.ThrowHelper.ThrowOutOfMemoryException() | System.OutOfMemoryException | 0: newobj System.OutOfMemoryException..ctor, 1: throw | | System.Void System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index() | System.ArgumentOutOfRangeException | 0: ldc.i4.8, 1: ldc.i4.0, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | | System.Void System.ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException() | System.ArgumentOutOfRangeException | 0: ldc.i4.7, 1: ldc.i4.s 31, 2: call System.ThrowHelper.GetArgumentOutOfRangeException, 3: throw | | System.Void System.ThrowHelper.ThrowWrongKeyTypeArgumentException`1(!0,System.Type) | System.ArgumentException | 0: ldarg.0, 1: box, 2: ldarg.1, 3: call System.ThrowHelper.GetWrongKeyTypeArgumentException, 4: throw | diff --git a/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected b/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected index 2b28f1b2c10..f578b51f984 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected +++ b/csharp/ql/test/library-tests/cil/dataflow/TrivialProperties.expected @@ -5,7 +5,6 @@ | System.Reflection.AssemblyName.CodeBase | | System.Reflection.AssemblyName.CultureInfo | | System.Reflection.AssemblyName.HashAlgorithm | -| System.Reflection.AssemblyName.KeyPair | | System.Reflection.AssemblyName.Name | | System.Reflection.AssemblyName.Version | | System.Reflection.AssemblyName.VersionCompatibility | diff --git a/csharp/ql/test/library-tests/cil/enums/enums.expected b/csharp/ql/test/library-tests/cil/enums/enums.expected index 6ffcb85f860..b7c5e703423 100644 --- a/csharp/ql/test/library-tests/cil/enums/enums.expected +++ b/csharp/ql/test/library-tests/cil/enums/enums.expected @@ -6,22 +6,26 @@ | Interop.PollEvents | short | | Interop.Sys.AccessMode | int | | Interop.Sys.ControlCharacterNames | int | -| Interop.Sys.CtrlCode | int | | Interop.Sys.FileAdvice | int | | Interop.Sys.FileStatusFlags | int | | Interop.Sys.LockOperations | int | | Interop.Sys.NodeType | int | | Interop.Sys.OpenFlags | int | +| Interop.Sys.Permissions | int | | Interop.Sys.SeekWhence | int | | Interop.Sys.SysConfName | int | | Interop.Sys.SysLogPriority | int | +| Interop.Sys.UnixFileSystemTypes | long | +| Microsoft.Win32.SafeHandles.SafeFileHandle.NullableBool | int | +| Microsoft.Win32.SafeHandles.SafeFileHandle.ThreadPoolValueTaskSource.Operation | byte | | System.AttributeTargets | int | | System.Base64FormattingOptions | int | | System.Buffers.ArrayPoolEventSource.BufferAllocatedReason | int | +| System.Buffers.ArrayPoolEventSource.BufferDroppedReason | int | | System.Buffers.OperationStatus | int | | System.Buffers.Text.Utf8Parser.ComponentParseResult | byte | | System.Buffers.Text.Utf8Parser.ParseNumberOptions | int | -| System.Buffers.TlsOverPerCoreLockedStacksArrayPool.MemoryPressure | int | +| System.Buffers.Utilities.MemoryPressure | int | | System.Collections.Generic.InsertionBehavior | byte | | System.ComponentModel.EditorBrowsableState | int | | System.Configuration.Assemblies.AssemblyHashAlgorithm | int | @@ -43,7 +47,6 @@ | System.Diagnostics.DebuggableAttribute.DebuggingModes | int | | System.Diagnostics.DebuggerBrowsableState | int | | System.Diagnostics.StackTrace.TraceFormat | int | -| System.Diagnostics.SymbolStore.SymAddressKind | int | | System.Diagnostics.Tracing.ControllerCommand | int | | System.Diagnostics.Tracing.EventActivityOptions | int | | System.Diagnostics.Tracing.EventChannel | byte | @@ -55,7 +58,6 @@ | System.Diagnostics.Tracing.EventLevel | int | | System.Diagnostics.Tracing.EventManifestOptions | int | | System.Diagnostics.Tracing.EventOpcode | int | -| System.Diagnostics.Tracing.EventPipeMetadataGenerator.MetadataTag | int | | System.Diagnostics.Tracing.EventPipeSerializationFormat | int | | System.Diagnostics.Tracing.EventProvider.WriteEventErrorCode | int | | System.Diagnostics.Tracing.EventProviderType | int | @@ -63,6 +65,8 @@ | System.Diagnostics.Tracing.EventTags | int | | System.Diagnostics.Tracing.EventTask | int | | System.Diagnostics.Tracing.ManifestEnvelope.ManifestFormats | byte | +| System.Diagnostics.Tracing.NativeRuntimeEventSource.ThreadAdjustmentReasonMap | uint | +| System.Diagnostics.Tracing.RuntimeEventSource.EventId | int | | System.Diagnostics.Tracing.TraceLoggingDataType | int | | System.Environment.SpecialFolder | int | | System.Environment.SpecialFolderOption | int | @@ -113,6 +117,10 @@ | System.IO.FileOptions | int | | System.IO.FileShare | int | | System.IO.HandleInheritability | int | +| System.IO.MatchCasing | int | +| System.IO.MatchType | int | +| System.IO.SearchOption | int | +| System.IO.SearchTarget | int | | System.IO.SeekOrigin | int | | System.LazyState | int | | System.LoaderOptimization | int | @@ -153,6 +161,8 @@ | System.Reflection.MethodAttributes | int | | System.Reflection.MethodImplAttributes | int | | System.Reflection.MethodSemanticsAttributes | int | +| System.Reflection.NullabilityInfoContext.NotAnnotatedStatus | int | +| System.Reflection.NullabilityState | int | | System.Reflection.PInvokeAttributes | int | | System.Reflection.ParameterAttributes | int | | System.Reflection.PortableExecutableKinds | int | @@ -192,6 +202,7 @@ | System.Runtime.InteropServices.ComTypes.TYPEKIND | int | | System.Runtime.InteropServices.ComTypes.VARFLAGS | short | | System.Runtime.InteropServices.ComTypes.VARKIND | int | +| System.Runtime.InteropServices.ComWrappersScenario | int | | System.Runtime.InteropServices.CreateComInterfaceFlags | int | | System.Runtime.InteropServices.CreateObjectFlags | int | | System.Runtime.InteropServices.CustomQueryInterfaceMode | int | @@ -199,6 +210,8 @@ | System.Runtime.InteropServices.DllImportSearchPath | int | | System.Runtime.InteropServices.GCHandleType | int | | System.Runtime.InteropServices.LayoutKind | int | +| System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.MessageSendFunction | int | +| System.Runtime.InteropServices.PosixSignal | int | | System.Runtime.InteropServices.UnmanagedType | int | | System.Runtime.InteropServices.VarEnum | int | | System.Runtime.Intrinsics.X86.FloatComparisonMode | byte | @@ -229,6 +242,9 @@ | System.Threading.EventResetMode | int | | System.Threading.LazyThreadSafetyMode | int | | System.Threading.LockRecursionPolicy | int | +| System.Threading.OpenExistingResult | int | +| System.Threading.PortableThreadPool.HillClimbing.StateOrTransition | int | +| System.Threading.PortableThreadPool.PendingBlockingAdjustment | byte | | System.Threading.ReaderWriterLockSlim.EnterLockType | int | | System.Threading.ReaderWriterLockSlim.EnterSpinLockReason | int | | System.Threading.ReaderWriterLockSlim.WaiterStates | byte | @@ -240,13 +256,13 @@ | System.Threading.Tasks.InternalTaskOptions | int | | System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags | int | | System.Threading.Tasks.Sources.ValueTaskSourceStatus | int | +| System.Threading.Tasks.Task.TaskStateFlags | int | | System.Threading.Tasks.TaskContinuationOptions | int | | System.Threading.Tasks.TaskCreationOptions | int | | System.Threading.Tasks.TaskStatus | int | | System.Threading.Tasks.TplEventSource.TaskWaitBehavior | int | | System.Threading.ThreadPriority | int | | System.Threading.ThreadState | int | -| System.Threading.WaitHandle.OpenExistingResult | int | | System.TimeZoneInfo.StringSerializer.State | int | | System.TimeZoneInfo.TZVersion | byte | | System.TimeZoneInfo.TimeZoneInfoResult | int | diff --git a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected b/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected index aa33d68fd46..4f3f786ba56 100644 --- a/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected +++ b/csharp/ql/test/library-tests/cil/functionPointers/functionPointers.expected @@ -6,9 +6,16 @@ fnptr | delegate* managed | 2 | Int32 | 0 | | delegate* managed | 1 | Void* | 0 | | delegate* managed | 0 | Int32 | 0 | -| delegate* managed | 3 | void | 0 | +| delegate* managed | 3 | void | 0 | +| delegate* managed | 1 | void | 0 | | delegate* managed | 1 | Int32* | 0 | +| delegate* managed | 1 | Object | 0 | | delegate* unmanaged | 2 | void | 9 | +| delegate* unmanaged | 2 | Int32 | 9 | +| delegate* unmanaged | 3 | Int32 | 9 | +| delegate* unmanaged | 1 | Int32 | 9 | +| delegate* unmanaged | 1 | void | 9 | +| delegate* unmanaged | 0 | void | 9 | | delegate* unmanaged[StdCall] | 3 | void | 2 | params | delegate* managed | 0 | Parameter 0 of delegate* managed | !0 | @@ -20,12 +27,21 @@ params | delegate* managed | 0 | Parameter 0 of delegate* managed | Int32& | | delegate* managed | 1 | Parameter 1 of delegate* managed | Object& | | delegate* managed | 0 | Parameter 0 of delegate* managed | Int32* | -| delegate* managed | 0 | Parameter 0 of delegate* managed | IntPtr | -| delegate* managed | 1 | Parameter 1 of delegate* managed | IntPtr | -| delegate* managed | 2 | Parameter 2 of delegate* managed | IntPtr* | +| delegate* managed | 0 | Parameter 0 of delegate* managed | IntPtr | +| delegate* managed | 1 | Parameter 1 of delegate* managed | IntPtr | +| delegate* managed | 2 | Parameter 2 of delegate* managed | PortableTailCallFrame* | +| delegate* managed | 0 | Parameter 0 of delegate* managed | Object | | delegate* managed | 0 | Parameter 0 of delegate* managed | Void* | +| delegate* managed | 0 | Parameter 0 of delegate* managed | Void* | | delegate* unmanaged | 0 | Parameter 0 of delegate* unmanaged | Char* | | delegate* unmanaged | 1 | Parameter 1 of delegate* unmanaged | IntPtr | +| delegate* unmanaged | 0 | Parameter 0 of delegate* unmanaged | Int32 | +| delegate* unmanaged | 1 | Parameter 1 of delegate* unmanaged | PosixSignal | +| delegate* unmanaged | 0 | Parameter 0 of delegate* unmanaged | IntPtr | +| delegate* unmanaged | 1 | Parameter 1 of delegate* unmanaged | Guid* | +| delegate* unmanaged | 2 | Parameter 2 of delegate* unmanaged | IntPtr* | +| delegate* unmanaged | 0 | Parameter 0 of delegate* unmanaged | IntPtr | +| delegate* unmanaged | 0 | Parameter 0 of delegate* unmanaged | IntPtr | | delegate* unmanaged[StdCall] | 0 | Parameter 0 of delegate* unmanaged[StdCall] | Int32& | | delegate* unmanaged[StdCall] | 1 | Parameter 1 of delegate* unmanaged[StdCall] | Object& | | delegate* unmanaged[StdCall] | 2 | Parameter 2 of delegate* unmanaged[StdCall] | !0 | diff --git a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected b/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected index 9017f391006..8367d400bda 100644 --- a/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected +++ b/csharp/ql/test/library-tests/cil/init-only-prop/customModifiers.expected @@ -4,20 +4,19 @@ | Invoke | System.Runtime.InteropServices.InAttribute | modreq | | Max | System.Runtime.InteropServices.InAttribute | modreq | | Min | System.Runtime.InteropServices.InAttribute | modreq | +| ThreadIDExecutingCallbacks | System.Runtime.CompilerServices.IsVolatile | modreq | | Value | System.Runtime.CompilerServices.IsVolatile | modreq | | _bufferedValuesIndex | System.Runtime.CompilerServices.IsVolatile | modreq | -| _callbackPartitions | System.Runtime.CompilerServices.IsVolatile | modreq | -| _canceled | System.Runtime.CompilerServices.IsVolatile | modreq | +| _canSeek | System.Runtime.CompilerServices.IsVolatile | modreq | | _container | System.Runtime.CompilerServices.IsVolatile | modreq | | _fullyInitialized | System.Runtime.CompilerServices.IsVolatile | modreq | | _head | System.Runtime.CompilerServices.IsVolatile | modreq | +| _idsThatDoNotTrackAllValues | System.Runtime.CompilerServices.IsVolatile | modreq | | _initialized | System.Runtime.CompilerServices.IsVolatile | modreq | -| _isFullyInitialized | System.Runtime.CompilerServices.IsVolatile | modreq | | _isWriterInProgress | System.Runtime.CompilerServices.IsVolatile | modreq | | _kernelEvent | System.Runtime.CompilerServices.IsVolatile | modreq | | _localTimeZone | System.Runtime.CompilerServices.IsVolatile | modreq | | _next | System.Runtime.CompilerServices.IsVolatile | modreq | -| _notifyWhenNoCallbacksRunning | System.Runtime.CompilerServices.IsVolatile | modreq | | _oldKeepAlive | System.Runtime.CompilerServices.IsVolatile | modreq | | _owner | System.Runtime.CompilerServices.IsVolatile | modreq | | _previous | System.Runtime.CompilerServices.IsVolatile | modreq | @@ -27,8 +26,8 @@ | _saShortTimes | System.Runtime.CompilerServices.IsVolatile | modreq | | _slotArray | System.Runtime.CompilerServices.IsVolatile | modreq | | _state | System.Runtime.CompilerServices.IsVolatile | modreq | +| _supportsRandomAccess | System.Runtime.CompilerServices.IsVolatile | modreq | | _tail | System.Runtime.CompilerServices.IsVolatile | modreq | -| _threadIDExecutingCallbacks | System.Runtime.CompilerServices.IsVolatile | modreq | | _timer | System.Runtime.CompilerServices.IsVolatile | modreq | | _version | System.Runtime.CompilerServices.IsVolatile | modreq | | _waCalendars | System.Runtime.CompilerServices.IsVolatile | modreq | @@ -63,34 +62,39 @@ | m_mask | System.Runtime.CompilerServices.IsVolatile | modreq | | m_nameIsCached | System.Runtime.CompilerServices.IsVolatile | modreq | | m_rawManifest | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_signature | System.Runtime.CompilerServices.IsVolatile | modreq | | m_stateFlags | System.Runtime.CompilerServices.IsVolatile | modreq | | m_tail | System.Runtime.CompilerServices.IsVolatile | modreq | | m_tailIndex | System.Runtime.CompilerServices.IsVolatile | modreq | -| m_taskId | System.Runtime.CompilerServices.IsVolatile | modreq | | m_taskSchedulerId | System.Runtime.CompilerServices.IsVolatile | modreq | | m_waitHandle | System.Runtime.CompilerServices.IsVolatile | modreq | | numOutstandingThreadRequests | System.Runtime.CompilerServices.IsVolatile | modreq | +| numRequestedWorkers | System.Runtime.CompilerServices.IsVolatile | modreq | | property Current | System.Runtime.InteropServices.InAttribute | modreq | | property Item | System.Runtime.InteropServices.InAttribute | modreq | | s_DefaultThreadCurrentCulture | System.Runtime.CompilerServices.IsVolatile | modreq | | s_DefaultThreadCurrentUICulture | System.Runtime.CompilerServices.IsVolatile | modreq | | s_Invariant | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_allContexts | System.Runtime.CompilerServices.IsVolatile | modreq | | s_anonymouslyHostedDynamicMethodsModule | System.Runtime.CompilerServices.IsVolatile | modreq | | s_cachedCultures | System.Runtime.CompilerServices.IsVolatile | modreq | | s_cachedCulturesByLcid | System.Runtime.CompilerServices.IsVolatile | modreq | | s_cachedCulturesByName | System.Runtime.CompilerServices.IsVolatile | modreq | | s_cachedRegions | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_canceledTask | System.Runtime.CompilerServices.IsVolatile | modreq | | s_currentRegionInfo | System.Runtime.CompilerServices.IsVolatile | modreq | | s_defaultBinder | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_defaultFlowSuppressed | System.Runtime.CompilerServices.IsVolatile | modreq | | s_defaultInstance | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_emitAnsiColorCodes | System.Runtime.CompilerServices.IsVolatile | modreq | | s_encoding | System.Runtime.CompilerServices.IsVolatile | modreq | -| s_haveProcessId | System.Runtime.CompilerServices.IsVolatile | modreq | | s_indentSize | System.Runtime.CompilerServices.IsVolatile | modreq | | s_initialized | System.Runtime.CompilerServices.IsVolatile | modreq | | s_invariantInfo | System.Runtime.CompilerServices.IsVolatile | modreq | | s_jajpDTFI | System.Runtime.CompilerServices.IsVolatile | modreq | | s_japaneseEraInfo | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_osVersion | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_processId | System.Runtime.CompilerServices.IsVolatile | modreq | +| s_processPath | System.Runtime.CompilerServices.IsVolatile | modreq | | s_provider | System.Runtime.CompilerServices.IsVolatile | modreq | | s_providers | System.Runtime.CompilerServices.IsVolatile | modreq | | s_regionNames | System.Runtime.CompilerServices.IsVolatile | modreq | diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected index bc6ec867fb0..e7a5bdfbdaa 100644 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected +++ b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected @@ -1,1839 +1,2382 @@ -| Add | method | 32 | -| AddByteOffset | method | 32 | -| As | method | 32 | -| AsMutable | method | 32 | -| AsRef | method | 32 | -| Element | method | 32 | -| FindValue | method | 32 | -| GetArrayDataReference | method | 32 | -| GetBucket | method | 32 | -| GetBucketRef | method | 32 | -| GetMultiDimensionalArrayBounds | method | 32 | -| GetNonNullPinnableReference | method | 32 | -| GetPinnableReference | method | 32 | -| GetRawArrayData | method | 32 | -| GetRawData | method | 32 | -| GetRawStringData | method | 32 | -| GetReference | method | 32 | -| LdelemaRef | method | 32 | -| Local variable 0 of method g__SoftwareFallback\|68_0 | local | 32 | -| Local variable 0 of method Add | local | 32 | -| Local variable 0 of method Clear | local | 32 | -| Local variable 0 of method CompareTo | local | 32 | -| Local variable 0 of method Contains | local | 32 | -| Local variable 0 of method FindValue | local | 32 | -| Local variable 0 of method GetElement | local | 32 | -| Local variable 0 of method GetHashCode | local | 32 | -| Local variable 0 of method GetPinnableReference | local | 32 | -| Local variable 0 of method GetUpper | local | 32 | -| Local variable 0 of method GetValue | local | 32 | -| Local variable 0 of method LinkTimer | local | 32 | -| Local variable 0 of method Memmove | local | 32 | -| Local variable 0 of method MoveNext | local | 32 | -| Local variable 0 of method Multiply | local | 32 | -| Local variable 0 of method PickPivotAndPartition | local | 32 | -| Local variable 0 of method Remove | local | 32 | -| Local variable 0 of method RemoveIndex | local | 32 | -| Local variable 0 of method Reverse | local | 32 | -| Local variable 0 of method RunOrScheduleAction | local | 32 | -| Local variable 0 of method SwapIfGreaterWithValues | local | 32 | -| Local variable 0 of method ToUInt64 | local | 32 | -| Local variable 0 of method TryDecodeFromUtf16 | local | 32 | -| Local variable 0 of method TryGetValue | local | 32 | -| Local variable 0 of method TryParseExactD | local | 32 | -| Local variable 0 of method TryParseExactN | local | 32 | -| Local variable 0 of method ValueToHexString | local | 32 | -| Local variable 0 of method ValueToString | local | 32 | -| Local variable 0 of method get_Item | local | 32 | -| Local variable 1 of method .ctor | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|34_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|35_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|36_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|37_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|38_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|39_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|40_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|41_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|42_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|43_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|44_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|45_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|46_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|47_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|48_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|49_0 | local | 32 | -| Local variable 1 of method b__33_0 | local | 32 | -| Local variable 1 of method b__158_0 | local | 32 | -| Local variable 1 of method b__158_1 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|69_0 | local | 32 | -| Local variable 1 of method g__SoftwareFallback\|75_0 | local | 32 | -| Local variable 1 of method Add | local | 32 | -| Local variable 1 of method Append | local | 32 | -| Local variable 1 of method AppendHelper | local | 32 | -| Local variable 1 of method AppendJoin | local | 32 | -| Local variable 1 of method CompareIgnoreCaseInvariantMode | local | 32 | -| Local variable 1 of method CompareStringIgnoreCase | local | 32 | -| Local variable 1 of method CompareTo | local | 32 | -| Local variable 1 of method Convert | local | 32 | -| Local variable 1 of method CreateActivityPathGuid | local | 32 | -| Local variable 1 of method EnumCalendarInfoCallback | local | 32 | -| Local variable 1 of method FindValue | local | 32 | -| Local variable 1 of method FromBase64CharArray | local | 32 | -| Local variable 1 of method FromBase64String | local | 32 | -| Local variable 1 of method FromUtf16 | local | 32 | -| Local variable 1 of method GetAscii | local | 32 | -| Local variable 1 of method GetByteCount | local | 32 | -| Local variable 1 of method GetByteCountWithFallback | local | 32 | -| Local variable 1 of method GetBytes | local | 32 | -| Local variable 1 of method GetBytesFromEncoding | local | 32 | -| Local variable 1 of method GetBytesWithFallback | local | 32 | -| Local variable 1 of method GetCategoryCasingTableOffsetNoBoundsChecks | local | 32 | -| Local variable 1 of method GetCharCount | local | 32 | -| Local variable 1 of method GetCharCountWithFallback | local | 32 | -| Local variable 1 of method GetChars | local | 32 | -| Local variable 1 of method GetCharsWithFallback | local | 32 | -| Local variable 1 of method GetEnvironmentVariable | local | 32 | -| Local variable 1 of method GetHashCode | local | 32 | -| Local variable 1 of method GetNonRandomizedHashCode | local | 32 | -| Local variable 1 of method GetNumericGraphemeTableOffsetNoBoundsChecks | local | 32 | -| Local variable 1 of method GetNumericValueNoBoundsCheck | local | 32 | -| Local variable 1 of method GetString | local | 32 | -| Local variable 1 of method GetUnicode | local | 32 | -| Local variable 1 of method GetUpperBound | local | 32 | -| Local variable 1 of method IcuCompareString | local | 32 | -| Local variable 1 of method IcuEndsWith | local | 32 | -| Local variable 1 of method IcuGetSortKeyLength | local | 32 | -| Local variable 1 of method IcuIndexOfCore | local | 32 | -| Local variable 1 of method IcuStartsWith | local | 32 | -| Local variable 1 of method IndexOf | local | 32 | -| Local variable 1 of method IndexOfOrdinalHelper | local | 32 | -| Local variable 1 of method IndexOfOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 1 of method Insert | local | 32 | -| Local variable 1 of method InternalCopy | local | 32 | -| Local variable 1 of method InvariantIndexOf | local | 32 | -| Local variable 1 of method IsAscii | local | 32 | -| Local variable 1 of method Join | local | 32 | -| Local variable 1 of method LastIndexOf | local | 32 | -| Local variable 1 of method MatchChars | local | 32 | -| Local variable 1 of method Memmove | local | 32 | -| Local variable 1 of method PickPivotAndPartition | local | 32 | -| Local variable 1 of method Pow10 | local | 32 | -| Local variable 1 of method ReplaceAllInChunk | local | 32 | -| Local variable 1 of method Reverse | local | 32 | -| Local variable 1 of method TZif_ToInt32 | local | 32 | -| Local variable 1 of method TZif_ToInt64 | local | 32 | -| Local variable 1 of method ThreadSafeCopy | local | 32 | -| Local variable 1 of method ToLowerAsciiInvariant | local | 32 | -| Local variable 1 of method ToString | local | 32 | -| Local variable 1 of method ToUpperAsciiInvariant | local | 32 | -| Local variable 1 of method ToUtf16 | local | 32 | -| Local variable 1 of method TraceOperationBegin | local | 32 | -| Local variable 1 of method Trim | local | 32 | -| Local variable 1 of method TrimEnd | local | 32 | -| Local variable 1 of method TrimStart | local | 32 | -| Local variable 1 of method TryDecodeFromUtf16 | local | 32 | -| Local variable 1 of method TryStringToNumber | local | 32 | -| Local variable 1 of method WaitMultipleIgnoringSyncContext | local | 32 | -| Local variable 1 of method WithElement | local | 32 | -| Local variable 1 of method WriteEvent | local | 32 | -| Local variable 1 of method WriteImpl | local | 32 | -| Local variable 1 of method WriteMultiMerge | local | 32 | -| Local variable 1 of method WriteNative | local | 32 | -| Local variable 1 of method get_Item | local | 32 | -| Local variable 2 of method .ctor | local | 32 | -| Local variable 2 of method ChangeCaseCommon | local | 32 | -| Local variable 2 of method CompareIgnoreCaseInvariantMode | local | 32 | -| Local variable 2 of method CompareOrdinalHelper | local | 32 | -| Local variable 2 of method CompareStringIgnoreCase | local | 32 | -| Local variable 2 of method Copy | local | 32 | -| Local variable 2 of method CopyTo | local | 32 | -| Local variable 2 of method Ctor | local | 32 | -| Local variable 2 of method Decompose | local | 32 | -| Local variable 2 of method DoAnsiConversion | local | 32 | -| Local variable 2 of method EndsWithOrdinalHelper | local | 32 | -| Local variable 2 of method EndsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 2 of method EqualStartingCharacterCount | local | 32 | -| Local variable 2 of method GenerateMetadataForNamedTypeV2 | local | 32 | -| Local variable 2 of method GetByteCount | local | 32 | -| Local variable 2 of method GetBytes | local | 32 | -| Local variable 2 of method GetChars | local | 32 | -| Local variable 2 of method GetValue | local | 32 | -| Local variable 2 of method IcuCreateSortKey | local | 32 | -| Local variable 2 of method IcuGetSortKey | local | 32 | -| Local variable 2 of method IcuIsNormalized | local | 32 | -| Local variable 2 of method Insert | local | 32 | -| Local variable 2 of method IntersectWithHashSetWithSameComparer | local | 32 | -| Local variable 2 of method IntroSort | local | 32 | -| Local variable 2 of method MemberwiseClone | local | 32 | -| Local variable 2 of method Multiply | local | 32 | -| Local variable 2 of method PickPivotAndPartition | local | 32 | -| Local variable 2 of method ReadNative | local | 32 | -| Local variable 2 of method Remove | local | 32 | -| Local variable 2 of method SetValue | local | 32 | -| Local variable 2 of method StartsWithOrdinalHelper | local | 32 | -| Local variable 2 of method StartsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 2 of method StringToAnsiString | local | 32 | -| Local variable 2 of method TryInt32ToHexStr | local | 32 | -| Local variable 2 of method TryInt64ToHexStr | local | 32 | -| Local variable 2 of method TryJoin | local | 32 | -| Local variable 2 of method TryNegativeInt32ToDecStr | local | 32 | -| Local variable 2 of method TryUInt32ToDecStr | local | 32 | -| Local variable 2 of method TryUInt64ToDecStr | local | 32 | -| Local variable 2 of method Write | local | 32 | -| Local variable 3 of method b__29_0 | local | 32 | -| Local variable 3 of method b__30_0 | local | 32 | -| Local variable 3 of method AddCustomAttributes | local | 32 | -| Local variable 3 of method CompareStringIgnoreCase | local | 32 | -| Local variable 3 of method Convert | local | 32 | -| Local variable 3 of method Copy | local | 32 | -| Local variable 3 of method CreateInstance | local | 32 | -| Local variable 3 of method CreateStringFromEncoding | local | 32 | -| Local variable 3 of method Enable | local | 32 | -| Local variable 3 of method Fill | local | 32 | -| Local variable 3 of method FindSection | local | 32 | -| Local variable 3 of method FromUtf16 | local | 32 | -| Local variable 3 of method GetBytes | local | 32 | -| Local variable 3 of method GetBytesWithFallback | local | 32 | -| Local variable 3 of method GetChars | local | 32 | -| Local variable 3 of method GetCharsWithFallback | local | 32 | -| Local variable 3 of method GetNonRandomizedHashCodeOrdinalIgnoreCase | local | 32 | -| Local variable 3 of method IcuCompareString | local | 32 | -| Local variable 3 of method IcuEndsWith | local | 32 | -| Local variable 3 of method IcuIndexOfCore | local | 32 | -| Local variable 3 of method IcuStartsWith | local | 32 | -| Local variable 3 of method IndexOf | local | 32 | -| Local variable 3 of method IndexOfCharArray | local | 32 | -| Local variable 3 of method IndexOfOrdinalHelper | local | 32 | -| Local variable 3 of method IndexOfOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 3 of method Int32ToHexStr | local | 32 | -| Local variable 3 of method Int64ToHexStr | local | 32 | -| Local variable 3 of method InternalLoad | local | 32 | -| Local variable 3 of method IntroSort | local | 32 | -| Local variable 3 of method InvariantIndexOf | local | 32 | -| Local variable 3 of method JoinInternal | local | 32 | -| Local variable 3 of method LastIndexOf | local | 32 | -| Local variable 3 of method LastIndexOfCharArray | local | 32 | -| Local variable 3 of method MemberwiseClone | local | 32 | -| Local variable 3 of method NegativeInt32ToDecStr | local | 32 | -| Local variable 3 of method PickPivotAndPartition | local | 32 | -| Local variable 3 of method Pin | local | 32 | -| Local variable 3 of method Populate | local | 32 | -| Local variable 3 of method Pow10 | local | 32 | -| Local variable 3 of method RemoveWhere | local | 32 | -| Local variable 3 of method Resize | local | 32 | -| Local variable 3 of method StringToCoTaskMemUni | local | 32 | -| Local variable 3 of method StringToHGlobalUni | local | 32 | -| Local variable 3 of method ThreadSafeCopy | local | 32 | -| Local variable 3 of method ToBase64String | local | 32 | -| Local variable 3 of method ToString | local | 32 | -| Local variable 3 of method ToUtf16 | local | 32 | -| Local variable 3 of method TryNegativeInt64ToDecStr | local | 32 | -| Local variable 3 of method TryToBase64Chars | local | 32 | -| Local variable 3 of method UInt32ToDecStr | local | 32 | -| Local variable 3 of method UInt64ToDecStr | local | 32 | -| Local variable 3 of method Write | local | 32 | -| Local variable 3 of method WriteEvent | local | 32 | -| Local variable 3 of method WriteStdoutAnsiString | local | 32 | -| Local variable 4 of method .ctor | local | 32 | -| Local variable 4 of method AddDivisor | local | 32 | -| Local variable 4 of method AddIfNotPresent | local | 32 | -| Local variable 4 of method AddNullTerminatedString | local | 32 | -| Local variable 4 of method Append | local | 32 | -| Local variable 4 of method ChangeCaseCommon | local | 32 | -| Local variable 4 of method CompareOrdinalHelper | local | 32 | -| Local variable 4 of method ConstructFrom | local | 32 | -| Local variable 4 of method Copy | local | 32 | -| Local variable 4 of method EndsWithOrdinalHelper | local | 32 | -| Local variable 4 of method EndsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 4 of method EqualStartingCharacterCount | local | 32 | -| Local variable 4 of method EscapeString | local | 32 | -| Local variable 4 of method FormatPrintF | local | 32 | -| Local variable 4 of method GetBytes | local | 32 | -| Local variable 4 of method GetBytesForSmallInput | local | 32 | -| Local variable 4 of method GetChars | local | 32 | -| Local variable 4 of method GetMessage | local | 32 | -| Local variable 4 of method IcuGetSortKey | local | 32 | -| Local variable 4 of method IcuGetUnicodeCore | local | 32 | -| Local variable 4 of method InternalLoad | local | 32 | -| Local variable 4 of method IntroSort | local | 32 | -| Local variable 4 of method JoinInternal | local | 32 | -| Local variable 4 of method MakeRoom | local | 32 | -| Local variable 4 of method NegativeInt64ToDecStr | local | 32 | -| Local variable 4 of method PadLeft | local | 32 | -| Local variable 4 of method PadRight | local | 32 | -| Local variable 4 of method Remove | local | 32 | -| Local variable 4 of method Replace | local | 32 | -| Local variable 4 of method Resize | local | 32 | -| Local variable 4 of method StartsWithOrdinalHelper | local | 32 | -| Local variable 4 of method StartsWithOrdinalIgnoreCaseHelper | local | 32 | -| Local variable 4 of method TryInsert | local | 32 | -| Local variable 4 of method Write | local | 32 | -| Local variable 4 of method WriteCore | local | 32 | -| Local variable 4 of method WriteEvent | local | 32 | -| Local variable 5 of method Clear | local | 32 | -| Local variable 5 of method ConvertToNative | local | 32 | -| Local variable 5 of method Copy | local | 32 | -| Local variable 5 of method CreateInstance | local | 32 | -| Local variable 5 of method Enable | local | 32 | -| Local variable 5 of method GetAttributeUsage | local | 32 | -| Local variable 5 of method GetBytes | local | 32 | -| Local variable 5 of method GetBytesWithFallback | local | 32 | -| Local variable 5 of method GetCharsWithFallback | local | 32 | -| Local variable 5 of method GetCwd | local | 32 | -| Local variable 5 of method GetHomeDirectory | local | 32 | -| Local variable 5 of method Insert | local | 32 | -| Local variable 5 of method JoinInternal | local | 32 | -| Local variable 5 of method PickPivotAndPartition | local | 32 | -| Local variable 5 of method Pow10 | local | 32 | -| Local variable 5 of method Read | local | 32 | -| Local variable 5 of method ReadArray | local | 32 | -| Local variable 5 of method ReadCore | local | 32 | -| Local variable 5 of method Replace | local | 32 | -| Local variable 5 of method Resize | local | 32 | -| Local variable 5 of method StringToCoTaskMemUTF8 | local | 32 | -| Local variable 5 of method StringToHGlobalUTF8 | local | 32 | -| Local variable 5 of method SubtractDivisor | local | 32 | -| Local variable 5 of method ToBase64String | local | 32 | -| Local variable 5 of method ToLowerAsciiInvariant | local | 32 | -| Local variable 5 of method ToUpperAsciiInvariant | local | 32 | -| Local variable 5 of method TryToBase64Chars | local | 32 | -| Local variable 5 of method WriteArray | local | 32 | -| Local variable 5 of method WriteEvent | local | 32 | -| Local variable 5 of method WriteWhenEncodingIsNotUtf8 | local | 32 | -| Local variable 5 of method get_UserName | local | 32 | -| Local variable 6 of method Append | local | 32 | -| Local variable 6 of method ConvertFixedToManaged | local | 32 | -| Local variable 6 of method ConvertToBase64Array | local | 32 | -| Local variable 6 of method ConvertToNative | local | 32 | -| Local variable 6 of method Copy | local | 32 | -| Local variable 6 of method FindItemIndex | local | 32 | -| Local variable 6 of method GenerateMetadataForProperty | local | 32 | -| Local variable 6 of method IcuGetAsciiCore | local | 32 | -| Local variable 6 of method InternalCopy | local | 32 | -| Local variable 6 of method JoinInternal | local | 32 | -| Local variable 6 of method PadRight | local | 32 | -| Local variable 6 of method PickPivotAndPartition | local | 32 | -| Local variable 6 of method Remove | local | 32 | -| Local variable 6 of method Resize | local | 32 | -| Local variable 6 of method SetConstantValue | local | 32 | -| Local variable 6 of method ToBase64CharArray | local | 32 | -| Local variable 6 of method TryDecodeFromUtf16 | local | 32 | -| Local variable 6 of method TryFormat | local | 32 | -| Local variable 7 of method .ctor | local | 32 | -| Local variable 7 of method AddIfNotPresent | local | 32 | -| Local variable 7 of method ConvertFixedToNative | local | 32 | -| Local variable 7 of method GenerateMetadata | local | 32 | -| Local variable 7 of method GetBytesWithFallback | local | 32 | -| Local variable 7 of method GetCharsWithFallback | local | 32 | -| Local variable 7 of method IcuGetHashCodeOfString | local | 32 | -| Local variable 7 of method IcuNormalize | local | 32 | -| Local variable 7 of method Insert | local | 32 | -| Local variable 7 of method JoinInternal | local | 32 | -| Local variable 7 of method PadLeft | local | 32 | -| Local variable 7 of method Populate | local | 32 | -| Local variable 7 of method Pow10 | local | 32 | -| Local variable 7 of method Resize | local | 32 | -| Local variable 7 of method TryInsert | local | 32 | -| Local variable 7 of method WriteWhenEncodingIsNotUtf8 | local | 32 | -| Local variable 8 of method JoinInternal | local | 32 | -| Local variable 8 of method Pow10 | local | 32 | -| Local variable 8 of method SetConstantValue | local | 32 | -| Local variable 8 of method ToBase64CharArray | local | 32 | -| Local variable 8 of method ToString | local | 32 | -| Local variable 8 of method TrimExcess | local | 32 | -| Local variable 8 of method WriteEventString | local | 32 | -| Local variable 9 of method g__GetNonRandomizedHashCodeOrdinalIgnoreCaseSlow\|52_0 | local | 32 | -| Local variable 9 of method AddIfNotPresent | local | 32 | -| Local variable 9 of method Enable | local | 32 | -| Local variable 9 of method FindItemIndex | local | 32 | -| Local variable 9 of method GenerateMetadataForProperty | local | 32 | -| Local variable 9 of method IcuGetHashCodeOfString | local | 32 | -| Local variable 9 of method IcuNormalize | local | 32 | -| Local variable 9 of method Insert | local | 32 | -| Local variable 9 of method IntersectWithEnumerable | local | 32 | -| Local variable 9 of method JoinInternal | local | 32 | -| Local variable 9 of method TrimExcess | local | 32 | -| Local variable 10 of method .ctor | local | 32 | -| Local variable 10 of method FormatFixed | local | 32 | -| Local variable 10 of method IntToString | local | 32 | -| Local variable 10 of method JoinInternal | local | 32 | -| Local variable 10 of method LongToString | local | 32 | -| Local variable 10 of method ReplaceAllInChunk | local | 32 | -| Local variable 10 of method TrimExcess | local | 32 | -| Local variable 11 of method AddIfNotPresent | local | 32 | -| Local variable 11 of method IcuGetHashCodeOfString | local | 32 | -| Local variable 11 of method Resize | local | 32 | -| Local variable 12 of method FindItemIndex | local | 32 | -| Local variable 12 of method JoinCore | local | 32 | -| Local variable 13 of method .ctor | local | 32 | -| Local variable 13 of method AddIfNotPresent | local | 32 | -| Local variable 13 of method ChangeCaseCommon | local | 32 | -| Local variable 14 of method Resize | local | 32 | -| Local variable 16 of method .ctor | local | 32 | -| Local variable 19 of method .ctor | local | 32 | -| Local variable 19 of method NumberToStringFormat | local | 32 | -| Local variable 21 of method GenerateMetadata | local | 32 | -| Local variable 22 of method .ctor | local | 32 | -| Local variable 23 of method WriteEvent | local | 32 | -| Local variable 24 of method WriteEvent | local | 32 | -| Local variable 25 of method .ctor | local | 32 | -| Local variable 25 of method WriteEvent | local | 32 | -| Local variable 26 of method WriteEvent | local | 32 | -| Local variable 27 of method WriteEvent | local | 32 | -| Local variable 28 of method .ctor | local | 32 | -| Local variable 28 of method WriteEvent | local | 32 | -| Local variable 29 of method WriteEvent | local | 32 | -| Local variable 30 of method g__SseImpl\|59_0 | local | 32 | -| Local variable 30 of method WriteEvent | local | 32 | -| Local variable 31 of method NumberToStringFormat | local | 32 | -| Local variable 34 of method WriteEvent | local | 32 | -| Max | method | 32 | -| Min | method | 32 | -| NullRef | method | 32 | -| Parameter 0 of g__SoftwareFallback\|12_0 | parameter | 32 | -| Parameter 0 of g__SoftwareFallback\|14_0 | parameter | 32 | -| Parameter 0 of g__IncrementX\|112_1 | parameter | 32 | -| Parameter 0 of g__IncrementY\|112_0 | parameter | 32 | -| Parameter 0 of Abs | parameter | 32 | -| Parameter 0 of AccumulateDecimalDigitsIntoBigInteger | parameter | 32 | -| Parameter 0 of Add | parameter | 32 | -| Parameter 0 of Add32To96 | parameter | 32 | -| Parameter 0 of AddByteOffset | parameter | 32 | -| Parameter 0 of AddCustomAttributes | parameter | 32 | -| Parameter 0 of AddDivisor | parameter | 32 | -| Parameter 0 of AddEventDescriptor | parameter | 32 | -| Parameter 0 of AddExceptionsForCompletedTask | parameter | 32 | -| Parameter 0 of AddNonLetter | parameter | 32 | -| Parameter 0 of AddToCleanupList | parameter | 32 | -| Parameter 0 of AdjustDaylightDeltaToExpectedRange | parameter | 32 | -| Parameter 0 of AdjustHour | parameter | 32 | -| Parameter 0 of AdjustTimeZoneToLocal | parameter | 32 | -| Parameter 0 of AdjustTimeZoneToUniversal | parameter | 32 | -| Parameter 0 of And | parameter | 32 | -| Parameter 0 of AppendParameters | parameter | 32 | -| Parameter 0 of AreSame | parameter | 32 | -| Parameter 0 of As | parameter | 32 | -| Parameter 0 of AsMutable | parameter | 32 | -| Parameter 0 of AsPointer | parameter | 32 | -| Parameter 0 of AsRef | parameter | 32 | -| Parameter 0 of AssembleFloatingPointBits | parameter | 32 | -| Parameter 0 of AwaitOnCompleted | parameter | 32 | -| Parameter 0 of AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 0 of BinarySearch | parameter | 32 | -| Parameter 0 of Block | parameter | 32 | -| Parameter 0 of BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 0 of ByteOffset | parameter | 32 | -| Parameter 0 of CheckDefaultDateTime | parameter | 32 | -| Parameter 0 of CheckForAvailableMemory | parameter | 32 | -| Parameter 0 of CheckNewValue | parameter | 32 | -| Parameter 0 of CheckVMForIOPacket | parameter | 32 | -| Parameter 0 of ClearWithReferences | parameter | 32 | -| Parameter 0 of ClearWithoutReferences | parameter | 32 | -| Parameter 0 of Compare | parameter | 32 | -| Parameter 0 of CompareExchange | parameter | 32 | -| Parameter 0 of CompareIgnoreCaseInvariantMode | parameter | 32 | -| Parameter 0 of CompareStringIgnoreCase | parameter | 32 | -| Parameter 0 of CompareStringIgnoreCaseNonAscii | parameter | 32 | -| Parameter 0 of ComputeHash32 | parameter | 32 | -| Parameter 0 of ComputeHash32OrdinalIgnoreCase | parameter | 32 | -| Parameter 0 of ComputeHash32OrdinalIgnoreCaseSlow | parameter | 32 | -| Parameter 0 of ConfigureFormatOS | parameter | 32 | -| Parameter 0 of ConfigureFormatR | parameter | 32 | -| Parameter 0 of Contains | parameter | 32 | -| Parameter 0 of ConvertBigIntegerToFloatingPointBits | parameter | 32 | -| Parameter 0 of CountSignificantBits | parameter | 32 | -| Parameter 0 of Create | parameter | 32 | -| Parameter 0 of CreateReadOnlySpan | parameter | 32 | -| Parameter 0 of CreateSpan | parameter | 32 | -| Parameter 0 of DateTimeOffsetTimeZonePostProcessing | parameter | 32 | -| Parameter 0 of DebugCheckEvent | parameter | 32 | -| Parameter 0 of DecAddSub | parameter | 32 | -| Parameter 0 of DecDivMod1E9 | parameter | 32 | -| Parameter 0 of DecimalToNumber | parameter | 32 | -| Parameter 0 of Decode | parameter | 32 | -| Parameter 0 of DecodePayload | parameter | 32 | -| Parameter 0 of Decrement | parameter | 32 | -| Parameter 0 of DestroyCleanupList | parameter | 32 | -| Parameter 0 of DetermineTimeZoneAdjustments | parameter | 32 | -| Parameter 0 of Div96By32 | parameter | 32 | -| Parameter 0 of Div96By64 | parameter | 32 | -| Parameter 0 of Div96ByConst | parameter | 32 | -| Parameter 0 of Div128By96 | parameter | 32 | -| Parameter 0 of DivRem | parameter | 32 | -| Parameter 0 of Element | parameter | 32 | -| Parameter 0 of EncodeObject | parameter | 32 | -| Parameter 0 of EnsureInitialized | parameter | 32 | -| Parameter 0 of EnsureInitializedCore | parameter | 32 | -| Parameter 0 of EnsureLockInitialized | parameter | 32 | -| Parameter 0 of EqualsIgnoreCase | parameter | 32 | -| Parameter 0 of Exchange | parameter | 32 | -| Parameter 0 of ExchangeAdd | parameter | 32 | -| Parameter 0 of FormatCurrency | parameter | 32 | -| Parameter 0 of FormatDouble | parameter | 32 | -| Parameter 0 of FormatExponent | parameter | 32 | -| Parameter 0 of FormatFixed | parameter | 32 | -| Parameter 0 of FormatGeneral | parameter | 32 | -| Parameter 0 of FormatHalf | parameter | 32 | -| Parameter 0 of FormatNumber | parameter | 32 | -| Parameter 0 of FormatPercent | parameter | 32 | -| Parameter 0 of FormatScientific | parameter | 32 | -| Parameter 0 of FormatSingle | parameter | 32 | -| Parameter 0 of GetAvailableThreads | parameter | 32 | -| Parameter 0 of GetAvailableThreadsNative | parameter | 32 | -| Parameter 0 of GetBytes | parameter | 32 | -| Parameter 0 of GetCpuUtilization | parameter | 32 | -| Parameter 0 of GetCurrentMethod | parameter | 32 | -| Parameter 0 of GetDateOfDSN | parameter | 32 | -| Parameter 0 of GetDateOfNDS | parameter | 32 | -| Parameter 0 of GetDateOfNNDS | parameter | 32 | -| Parameter 0 of GetDateTimeNow | parameter | 32 | -| Parameter 0 of GetDateTimeParseException | parameter | 32 | -| Parameter 0 of GetDayOfMN | parameter | 32 | -| Parameter 0 of GetDayOfMNN | parameter | 32 | -| Parameter 0 of GetDayOfNM | parameter | 32 | -| Parameter 0 of GetDayOfNN | parameter | 32 | -| Parameter 0 of GetDayOfNNN | parameter | 32 | -| Parameter 0 of GetDayOfNNY | parameter | 32 | -| Parameter 0 of GetDayOfYM | parameter | 32 | -| Parameter 0 of GetDayOfYMN | parameter | 32 | -| Parameter 0 of GetDayOfYN | parameter | 32 | -| Parameter 0 of GetDayOfYNN | parameter | 32 | -| Parameter 0 of GetDefaultLocaleName | parameter | 32 | -| Parameter 0 of GetDefaultYear | parameter | 32 | -| Parameter 0 of GetDirectoryEntryFullPath | parameter | 32 | -| Parameter 0 of GetExecutingAssembly | parameter | 32 | -| Parameter 0 of GetHashCode | parameter | 32 | -| Parameter 0 of GetHebrewDayOfNM | parameter | 32 | -| Parameter 0 of GetIUnknownImpl | parameter | 32 | -| Parameter 0 of GetMaxThreads | parameter | 32 | -| Parameter 0 of GetMaxThreadsNative | parameter | 32 | -| Parameter 0 of GetMinThreads | parameter | 32 | -| Parameter 0 of GetMinThreadsNative | parameter | 32 | -| Parameter 0 of GetNextIntroducedMethod | parameter | 32 | -| Parameter 0 of GetStateMachineBox | parameter | 32 | -| Parameter 0 of GetSymbolOrDefault | parameter | 32 | -| Parameter 0 of GetThreadDeserializationTracker | parameter | 32 | -| Parameter 0 of GetTimeOfN | parameter | 32 | -| Parameter 0 of GetTimeOfNN | parameter | 32 | -| Parameter 0 of GetTimeOfNNN | parameter | 32 | -| Parameter 0 of GetTimeZoneName | parameter | 32 | -| Parameter 0 of GetWindowSize | parameter | 32 | -| Parameter 0 of GreaterThan | parameter | 32 | -| Parameter 0 of GrowTable | parameter | 32 | -| Parameter 0 of HandleTimeZone | parameter | 32 | -| Parameter 0 of HashShift | parameter | 32 | -| Parameter 0 of HeuristicDivide | parameter | 32 | -| Parameter 0 of IncreaseScale | parameter | 32 | -| Parameter 0 of IncreaseScale64 | parameter | 32 | -| Parameter 0 of Increment | parameter | 32 | -| Parameter 0 of IndexOf | parameter | 32 | -| Parameter 0 of IndexOfAny | parameter | 32 | -| Parameter 0 of InitBlockUnaligned | parameter | 32 | -| Parameter 0 of Initialize | parameter | 32 | -| Parameter 0 of Int64DivMod1E9 | parameter | 32 | -| Parameter 0 of InternalGetCurrentMethod | parameter | 32 | -| Parameter 0 of InternalRound | parameter | 32 | -| Parameter 0 of IsAddressGreaterThan | parameter | 32 | -| Parameter 0 of IsAddressLessThan | parameter | 32 | -| Parameter 0 of IsNullRef | parameter | 32 | -| Parameter 0 of IsUtf8ContinuationByte | parameter | 32 | -| Parameter 0 of KeepAliveViaCleanupList | parameter | 32 | -| Parameter 0 of KeyToBucket | parameter | 32 | -| Parameter 0 of LastIndexOf | parameter | 32 | -| Parameter 0 of LastIndexOfAny | parameter | 32 | -| Parameter 0 of LessThan | parameter | 32 | -| Parameter 0 of LoadNUInt | parameter | 32 | -| Parameter 0 of LoadUInt | parameter | 32 | -| Parameter 0 of LoadUShort | parameter | 32 | -| Parameter 0 of LoadVector | parameter | 32 | -| Parameter 0 of LoadVector128 | parameter | 32 | -| Parameter 0 of LoadVector256 | parameter | 32 | -| Parameter 0 of MatchAbbreviatedDayName | parameter | 32 | -| Parameter 0 of MatchAbbreviatedMonthName | parameter | 32 | -| Parameter 0 of MatchAbbreviatedTimeMark | parameter | 32 | -| Parameter 0 of MatchDayName | parameter | 32 | -| Parameter 0 of MatchEraName | parameter | 32 | -| Parameter 0 of MatchHebrewDigits | parameter | 32 | -| Parameter 0 of MatchMonthName | parameter | 32 | -| Parameter 0 of MatchTimeMark | parameter | 32 | -| Parameter 0 of MatchWord | parameter | 32 | -| Parameter 0 of Max | parameter | 32 | -| Parameter 0 of Memmove | parameter | 32 | -| Parameter 0 of Min | parameter | 32 | -| Parameter 0 of Multiply | parameter | 32 | -| Parameter 0 of NarrowFourUtf16CharsToAsciiAndWriteToBuffer | parameter | 32 | -| Parameter 0 of NarrowFourUtf16CharsToLatin1AndWriteToBuffer | parameter | 32 | -| Parameter 0 of NarrowTwoUtf16CharsToAsciiAndWriteToBuffer | parameter | 32 | -| Parameter 0 of NarrowTwoUtf16CharsToLatin1AndWriteToBuffer | parameter | 32 | -| Parameter 0 of NumberToDouble | parameter | 32 | -| Parameter 0 of NumberToFloatingPointBits | parameter | 32 | -| Parameter 0 of NumberToFloatingPointBitsSlow | parameter | 32 | -| Parameter 0 of NumberToHalf | parameter | 32 | -| Parameter 0 of NumberToSingle | parameter | 32 | -| Parameter 0 of NumberToString | parameter | 32 | -| Parameter 0 of NumberToStringFormat | parameter | 32 | -| Parameter 0 of Or | parameter | 32 | -| Parameter 0 of OverflowUnscale | parameter | 32 | -| Parameter 0 of ParseByFormat | parameter | 32 | -| Parameter 0 of ParseDigits | parameter | 32 | -| Parameter 0 of ParseExactDigits | parameter | 32 | -| Parameter 0 of ParseExactLiteral | parameter | 32 | -| Parameter 0 of ParseFraction | parameter | 32 | -| Parameter 0 of ParseFractionExact | parameter | 32 | -| Parameter 0 of ParseISO8601 | parameter | 32 | -| Parameter 0 of ParseJapaneseEraStart | parameter | 32 | -| Parameter 0 of ParseSign | parameter | 32 | -| Parameter 0 of ParseTimeZone | parameter | 32 | -| Parameter 0 of ParseTimeZoneOffset | parameter | 32 | -| Parameter 0 of ProcessDateTimeSuffix | parameter | 32 | -| Parameter 0 of ProcessTerminalState | parameter | 32 | -| Parameter 0 of ProcessTerminal_D | parameter | 32 | -| Parameter 0 of ProcessTerminal_DHMSF | parameter | 32 | -| Parameter 0 of ProcessTerminal_HM | parameter | 32 | -| Parameter 0 of ProcessTerminal_HMS_F_D | parameter | 32 | -| Parameter 0 of ProcessTerminal_HM_S_D | parameter | 32 | -| Parameter 0 of Read | parameter | 32 | -| Parameter 0 of ReadUnaligned | parameter | 32 | -| Parameter 0 of RefreshColors | parameter | 32 | -| Parameter 0 of RemoveFirstArgIfRelatedActivityId | parameter | 32 | -| Parameter 0 of Resize | parameter | 32 | -| Parameter 0 of Round | parameter | 32 | -| Parameter 0 of RoundNumber | parameter | 32 | -| Parameter 0 of SearchScale | parameter | 32 | -| Parameter 0 of SequenceCompareTo | parameter | 32 | -| Parameter 0 of SequenceEqual | parameter | 32 | -| Parameter 0 of SetDateDMY | parameter | 32 | -| Parameter 0 of SetDateMDY | parameter | 32 | -| Parameter 0 of SetDateYDM | parameter | 32 | -| Parameter 0 of SetDateYMD | parameter | 32 | -| Parameter 0 of SetUInt32 | parameter | 32 | -| Parameter 0 of SetUInt64 | parameter | 32 | -| Parameter 0 of SetValue | parameter | 32 | -| Parameter 0 of SetZero | parameter | 32 | -| Parameter 0 of Sign | parameter | 32 | -| Parameter 0 of SkipInit | parameter | 32 | -| Parameter 0 of Start | parameter | 32 | -| Parameter 0 of StartAssemblyLoad | parameter | 32 | -| Parameter 0 of StelemRef_Helper | parameter | 32 | -| Parameter 0 of StelemRef_Helper_NoCacheLookup | parameter | 32 | -| Parameter 0 of StopAssemblyLoad | parameter | 32 | -| Parameter 0 of SubtractDivisor | parameter | 32 | -| Parameter 0 of Swap | parameter | 32 | -| Parameter 0 of SwapIfGreater | parameter | 32 | -| Parameter 0 of TZif_GenerateAdjustmentRule | parameter | 32 | -| Parameter 0 of TZif_GenerateAdjustmentRules | parameter | 32 | -| Parameter 0 of TableMask | parameter | 32 | -| Parameter 0 of TrimEventDescriptors | parameter | 32 | -| Parameter 0 of Truncate | parameter | 32 | -| Parameter 0 of TryAdjustYear | parameter | 32 | -| Parameter 0 of TryDigitGenCounted | parameter | 32 | -| Parameter 0 of TryDigitGenShortest | parameter | 32 | -| Parameter 0 of TryFormatDecimalE | parameter | 32 | -| Parameter 0 of TryFormatDecimalF | parameter | 32 | -| Parameter 0 of TryFormatDecimalG | parameter | 32 | -| Parameter 0 of TryFormatThrowFormatException | parameter | 32 | -| Parameter 0 of TryGetAppLocalIcuSwitchValue | parameter | 32 | -| Parameter 0 of TryGetCachedCursorPosition | parameter | 32 | -| Parameter 0 of TryGetCursorPosition | parameter | 32 | -| Parameter 0 of TryGetLocalTzFile | parameter | 32 | -| Parameter 0 of TryNumberToDecimal | parameter | 32 | -| Parameter 0 of TryNumberToInt32 | parameter | 32 | -| Parameter 0 of TryNumberToInt64 | parameter | 32 | -| Parameter 0 of TryNumberToUInt32 | parameter | 32 | -| Parameter 0 of TryNumberToUInt64 | parameter | 32 | -| Parameter 0 of TryParseHebrewNumber | parameter | 32 | -| Parameter 0 of TryParseNumber | parameter | 32 | -| Parameter 0 of TryParseThrowFormatException | parameter | 32 | -| Parameter 0 of TryResolveStateMachineMethod | parameter | 32 | -| Parameter 0 of TryRunCounted | parameter | 32 | -| Parameter 0 of TryRunShortest | parameter | 32 | -| Parameter 0 of UnalignedCountVector | parameter | 32 | -| Parameter 0 of UnalignedCountVector128 | parameter | 32 | -| Parameter 0 of UnalignedCountVectorFromEnd | parameter | 32 | -| Parameter 0 of Unscale | parameter | 32 | -| Parameter 0 of UpdateStringBuilder | parameter | 32 | -| Parameter 0 of ValueAtReturn | parameter | 32 | -| Parameter 0 of VarCyFromDec | parameter | 32 | -| Parameter 0 of VarDecCmp | parameter | 32 | -| Parameter 0 of VarDecCmpSub | parameter | 32 | -| Parameter 0 of VarDecDiv | parameter | 32 | -| Parameter 0 of VarDecMod | parameter | 32 | -| Parameter 0 of VarDecModFull | parameter | 32 | -| Parameter 0 of VarDecMul | parameter | 32 | -| Parameter 0 of VarR4FromDec | parameter | 32 | -| Parameter 0 of VarR8FromDec | parameter | 32 | -| Parameter 0 of VerifyValidPunctuation | parameter | 32 | -| Parameter 0 of VolatileRead | parameter | 32 | -| Parameter 0 of VolatileWrite | parameter | 32 | -| Parameter 0 of WidenFourAsciiBytesToUtf16AndWriteToBuffer | parameter | 32 | -| Parameter 0 of Write | parameter | 32 | -| Parameter 0 of WriteBarrier | parameter | 32 | -| Parameter 0 of WriteFirstUtf16CharAsUtf8ThreeByteSequence | parameter | 32 | -| Parameter 0 of WriteNibble | parameter | 32 | -| Parameter 0 of WriteThreeLowOrderBytes | parameter | 32 | -| Parameter 0 of WriteTwoUtf16CharsAsTwoUtf8ThreeByteSequences | parameter | 32 | -| Parameter 0 of WriteUnaligned | parameter | 32 | -| Parameter 0 of _BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 0 of _GetCurrentMethod | parameter | 32 | -| Parameter 0 of _Memmove | parameter | 32 | -| Parameter 0 of _ZeroMemory | parameter | 32 | -| Parameter 0 of __BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of .ctor | parameter | 32 | -| Parameter 1 of g__SoftwareFallback\|59_1 | parameter | 32 | -| Parameter 1 of g__SseImpl\|59_0 | parameter | 32 | -| Parameter 1 of g__Write\|65_0 | parameter | 32 | -| Parameter 1 of AcquirePointer | parameter | 32 | -| Parameter 1 of AcquireSpan | parameter | 32 | -| Parameter 1 of Add | parameter | 32 | -| Parameter 1 of AddNonLetter | parameter | 32 | -| Parameter 1 of AddSpecialInterface | parameter | 32 | -| Parameter 1 of AddTitlecaseLetter | parameter | 32 | -| Parameter 1 of AddToList | parameter | 32 | -| Parameter 1 of AdjustDaylightDeltaToExpectedRange | parameter | 32 | -| Parameter 1 of AdjustTimeMark | parameter | 32 | -| Parameter 1 of AreSame | parameter | 32 | -| Parameter 1 of AwaitOnCompleted | parameter | 32 | -| Parameter 1 of AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 1 of Block | parameter | 32 | -| Parameter 1 of BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of ByteOffset | parameter | 32 | -| Parameter 1 of ChangeCaseCommon | parameter | 32 | -| Parameter 1 of CheckDefaultDateTime | parameter | 32 | -| Parameter 1 of CheckForAvailableMemory | parameter | 32 | -| Parameter 1 of CheckVMForIOPacket | parameter | 32 | -| Parameter 1 of ClearManaged | parameter | 32 | -| Parameter 1 of ClearNative | parameter | 32 | -| Parameter 1 of ClearNativeContents | parameter | 32 | -| Parameter 1 of Clone | parameter | 32 | -| Parameter 1 of Compare | parameter | 32 | -| Parameter 1 of ConfigureFormatOS | parameter | 32 | -| Parameter 1 of ConfigureFormatR | parameter | 32 | -| Parameter 1 of ConstructName | parameter | 32 | -| Parameter 1 of ConvertBigIntegerToFloatingPointBits | parameter | 32 | -| Parameter 1 of ConvertContentsToManaged | parameter | 32 | -| Parameter 1 of ConvertContentsToNative | parameter | 32 | -| Parameter 1 of ConvertGregorianToHijri | parameter | 32 | -| Parameter 1 of ConvertSafeHandleToNative | parameter | 32 | -| Parameter 1 of ConvertSmpToUtf16 | parameter | 32 | -| Parameter 1 of ConvertSpaceToManaged | parameter | 32 | -| Parameter 1 of ConvertSpaceToNative | parameter | 32 | -| Parameter 1 of CopyRuntimeTypeHandles | parameter | 32 | -| Parameter 1 of CountDecimalTrailingZeros | parameter | 32 | -| Parameter 1 of CreateActivityPathGuid | parameter | 32 | -| Parameter 1 of CreateAndGetBoundaries | parameter | 32 | -| Parameter 1 of CreationOptionsFromContinuationOptions | parameter | 32 | -| Parameter 1 of DangerousAddRef | parameter | 32 | -| Parameter 1 of DecAddSub | parameter | 32 | -| Parameter 1 of DecimalToNumber | parameter | 32 | -| Parameter 1 of Decode | parameter | 32 | -| Parameter 1 of DecodeFromUtf8 | parameter | 32 | -| Parameter 1 of DecodeFromUtf16 | parameter | 32 | -| Parameter 1 of DecodeLastFromUtf8 | parameter | 32 | -| Parameter 1 of DecodeLastFromUtf16 | parameter | 32 | -| Parameter 1 of Decompose | parameter | 32 | -| Parameter 1 of Deconstruct | parameter | 32 | -| Parameter 1 of Div96ByConst | parameter | 32 | -| Parameter 1 of Div128By96 | parameter | 32 | -| Parameter 1 of DivRem | parameter | 32 | -| Parameter 1 of DivRem32 | parameter | 32 | -| Parameter 1 of EatWhiteSpace | parameter | 32 | -| Parameter 1 of Encode | parameter | 32 | -| Parameter 1 of EncodeHexString | parameter | 32 | -| Parameter 1 of EncodeObject | parameter | 32 | -| Parameter 1 of EncodeTags | parameter | 32 | -| Parameter 1 of EnsureInitialized | parameter | 32 | -| Parameter 1 of EnsureInitializedCore | parameter | 32 | -| Parameter 1 of Enter | parameter | 32 | -| Parameter 1 of EnumConnectionPoints | parameter | 32 | -| Parameter 1 of EnumConnections | parameter | 32 | -| Parameter 1 of EnumObjectParam | parameter | 32 | -| Parameter 1 of EnumRunning | parameter | 32 | -| Parameter 1 of EqualsIgnoreCase | parameter | 32 | -| Parameter 1 of EtwEnableCallBack | parameter | 32 | -| Parameter 1 of EvaluateInternal | parameter | 32 | -| Parameter 1 of EventActivityIdControl | parameter | 32 | -| Parameter 1 of ExecuteWithThreadLocal | parameter | 32 | -| Parameter 1 of ExpandPredefinedFormat | parameter | 32 | -| Parameter 1 of ExtractFractionAndBiasedExponent | parameter | 32 | -| Parameter 1 of FStat | parameter | 32 | -| Parameter 1 of FilterCustomAttributeRecord | parameter | 32 | -| Parameter 1 of FilterHelper | parameter | 32 | -| Parameter 1 of FindConnectionPoint | parameter | 32 | -| Parameter 1 of FormatCurrency | parameter | 32 | -| Parameter 1 of FormatFixed | parameter | 32 | -| Parameter 1 of FormatGeneral | parameter | 32 | -| Parameter 1 of FormatNumber | parameter | 32 | -| Parameter 1 of FormatPercent | parameter | 32 | -| Parameter 1 of FormatScientific | parameter | 32 | -| Parameter 1 of GetAvailableThreads | parameter | 32 | -| Parameter 1 of GetAvailableThreadsNative | parameter | 32 | -| Parameter 1 of GetBindOptions | parameter | 32 | -| Parameter 1 of GetBoolValue | parameter | 32 | -| Parameter 1 of GetCachedSwitchValue | parameter | 32 | -| Parameter 1 of GetCachedSwitchValueInternal | parameter | 32 | -| Parameter 1 of GetClassID | parameter | 32 | -| Parameter 1 of GetCodeInfo | parameter | 32 | -| Parameter 1 of GetCombinedList | parameter | 32 | -| Parameter 1 of GetConfigBoolValue | parameter | 32 | -| Parameter 1 of GetConnectionInterface | parameter | 32 | -| Parameter 1 of GetConnectionPointContainer | parameter | 32 | -| Parameter 1 of GetContainingTypeLib | parameter | 32 | -| Parameter 1 of GetCurFile | parameter | 32 | -| Parameter 1 of GetCustData | parameter | 32 | -| Parameter 1 of GetDate | parameter | 32 | -| Parameter 1 of GetDateOfDSN | parameter | 32 | -| Parameter 1 of GetDateOfNDS | parameter | 32 | -| Parameter 1 of GetDateOfNNDS | parameter | 32 | -| Parameter 1 of GetDateTimeNow | parameter | 32 | -| Parameter 1 of GetDateTimeNowUtcOffsetFromUtc | parameter | 32 | -| Parameter 1 of GetDayOfMN | parameter | 32 | -| Parameter 1 of GetDayOfMNN | parameter | 32 | -| Parameter 1 of GetDayOfNM | parameter | 32 | -| Parameter 1 of GetDayOfNN | parameter | 32 | -| Parameter 1 of GetDayOfNNN | parameter | 32 | -| Parameter 1 of GetDayOfNNY | parameter | 32 | -| Parameter 1 of GetDayOfYM | parameter | 32 | -| Parameter 1 of GetDayOfYMN | parameter | 32 | -| Parameter 1 of GetDayOfYN | parameter | 32 | -| Parameter 1 of GetDayOfYNN | parameter | 32 | -| Parameter 1 of GetDefaultYear | parameter | 32 | -| Parameter 1 of GetDelegateTarget | parameter | 32 | -| Parameter 1 of GetDynamicOrStaticVariables | parameter | 32 | -| Parameter 1 of GetEnumData | parameter | 32 | -| Parameter 1 of GetFloatingPointMaxDigitsAndPrecision | parameter | 32 | -| Parameter 1 of GetGUID | parameter | 32 | -| Parameter 1 of GetHebrewDayOfNM | parameter | 32 | -| Parameter 1 of GetIUnknownImpl | parameter | 32 | -| Parameter 1 of GetInterface | parameter | 32 | -| Parameter 1 of GetJapaneseEraStartDate | parameter | 32 | -| Parameter 1 of GetJitContext | parameter | 32 | -| Parameter 1 of GetLibAttr | parameter | 32 | -| Parameter 1 of GetLicInfo | parameter | 32 | -| Parameter 1 of GetLocalSignature | parameter | 32 | -| Parameter 1 of GetLocaleName | parameter | 32 | -| Parameter 1 of GetMarshalAs | parameter | 32 | -| Parameter 1 of GetMaxThreads | parameter | 32 | -| Parameter 1 of GetMaxThreadsNative | parameter | 32 | -| Parameter 1 of GetMemberCache | parameter | 32 | -| Parameter 1 of GetMemberList | parameter | 32 | -| Parameter 1 of GetMetadataLength | parameter | 32 | -| Parameter 1 of GetMetadataLengthForTypeV2 | parameter | 32 | -| Parameter 1 of GetMetadataLengthV2 | parameter | 32 | -| Parameter 1 of GetMinThreads | parameter | 32 | -| Parameter 1 of GetMinThreadsNative | parameter | 32 | -| Parameter 1 of GetMonthDayOrder | parameter | 32 | -| Parameter 1 of GetNeutralResourcesLanguage | parameter | 32 | -| Parameter 1 of GetNextUnicodeScalarValueFromUtf16Surrogate | parameter | 32 | -| Parameter 1 of GetObjectStartLength | parameter | 32 | -| Parameter 1 of GetPEKind | parameter | 32 | -| Parameter 1 of GetPrimaryAndSecondary | parameter | 32 | -| Parameter 1 of GetPropertyOrFieldData | parameter | 32 | -| Parameter 1 of GetPwUidR | parameter | 32 | -| Parameter 1 of GetRegularToken | parameter | 32 | -| Parameter 1 of GetRunningObjectTable | parameter | 32 | -| Parameter 1 of GetScopeProps | parameter | 32 | -| Parameter 1 of GetSizeMax | parameter | 32 | -| Parameter 1 of GetSortHandle | parameter | 32 | -| Parameter 1 of GetStackTracesDeepCopy | parameter | 32 | -| Parameter 1 of GetStateMachineBox | parameter | 32 | -| Parameter 1 of GetTime | parameter | 32 | -| Parameter 1 of GetTimeOfN | parameter | 32 | -| Parameter 1 of GetTimeOfNN | parameter | 32 | -| Parameter 1 of GetTimeOfNNN | parameter | 32 | -| Parameter 1 of GetTimePrecise | parameter | 32 | -| Parameter 1 of GetTypeAttr | parameter | 32 | -| Parameter 1 of GetTypeComp | parameter | 32 | -| Parameter 1 of GetTypeFlags | parameter | 32 | -| Parameter 1 of GetTypeInfoFromType | parameter | 32 | -| Parameter 1 of GetTypeInfoOfGuid | parameter | 32 | -| Parameter 1 of GetTypeKind | parameter | 32 | -| Parameter 1 of GetUtf16SurrogatesFromSupplementaryPlaneScalar | parameter | 32 | -| Parameter 1 of GetVersion | parameter | 32 | -| Parameter 1 of GetWindowSize | parameter | 32 | -| Parameter 1 of GetYearMonthDayOrder | parameter | 32 | -| Parameter 1 of GetYearMonthOrder | parameter | 32 | -| Parameter 1 of GreaterThan | parameter | 32 | -| Parameter 1 of HandleTimeZone | parameter | 32 | -| Parameter 1 of Hash | parameter | 32 | -| Parameter 1 of HeuristicDivide | parameter | 32 | -| Parameter 1 of HtmlDecode | parameter | 32 | -| Parameter 1 of HtmlEncode | parameter | 32 | -| Parameter 1 of Initialize | parameter | 32 | -| Parameter 1 of Insert | parameter | 32 | -| Parameter 1 of Int32ToNumber | parameter | 32 | -| Parameter 1 of Int64ToNumber | parameter | 32 | -| Parameter 1 of InternalGetSignature | parameter | 32 | -| Parameter 1 of InternalLoad | parameter | 32 | -| Parameter 1 of InternalTryGetRawMetadata | parameter | 32 | -| Parameter 1 of Inverse | parameter | 32 | -| Parameter 1 of Invert | parameter | 32 | -| Parameter 1 of Invoke | parameter | 32 | -| Parameter 1 of IsAddressGreaterThan | parameter | 32 | -| Parameter 1 of IsAddressLessThan | parameter | 32 | -| Parameter 1 of IsSystemMoniker | parameter | 32 | -| Parameter 1 of LStat | parameter | 32 | -| Parameter 1 of LazyCreateEvent | parameter | 32 | -| Parameter 1 of LessThan | parameter | 32 | -| Parameter 1 of Lex | parameter | 32 | -| Parameter 1 of MapBufferToConsoleKey | parameter | 32 | -| Parameter 1 of MarshalToNative | parameter | 32 | -| Parameter 1 of Max | parameter | 32 | -| Parameter 1 of Memmove | parameter | 32 | -| Parameter 1 of Min | parameter | 32 | -| Parameter 1 of MoveNext | parameter | 32 | -| Parameter 1 of Multiply | parameter | 32 | -| Parameter 1 of NormalizeAdjustmentRuleOffset | parameter | 32 | -| Parameter 1 of NormalizeCultureName | parameter | 32 | -| Parameter 1 of NumberToFloatingPointBits | parameter | 32 | -| Parameter 1 of NumberToFloatingPointBitsSlow | parameter | 32 | -| Parameter 1 of NumberToString | parameter | 32 | -| Parameter 1 of NumberToStringFormat | parameter | 32 | -| Parameter 1 of OpenExistingWorker | parameter | 32 | -| Parameter 1 of ParseAttributeArguments | parameter | 32 | -| Parameter 1 of ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 1 of ParseByChar | parameter | 32 | -| Parameter 1 of ParseByFormat | parameter | 32 | -| Parameter 1 of ParseFormatO | parameter | 32 | -| Parameter 1 of ParseFormatR | parameter | 32 | -| Parameter 1 of ParseFormatSpecifier | parameter | 32 | -| Parameter 1 of ParseFraction | parameter | 32 | -| Parameter 1 of ParseHelper | parameter | 32 | -| Parameter 1 of ParseISO8601 | parameter | 32 | -| Parameter 1 of ParseSign | parameter | 32 | -| Parameter 1 of ParseTime | parameter | 32 | -| Parameter 1 of ParseTimeZone | parameter | 32 | -| Parameter 1 of Pow2 | parameter | 32 | -| Parameter 1 of Pow10 | parameter | 32 | -| Parameter 1 of ProcessDateTimeSuffix | parameter | 32 | -| Parameter 1 of ProcessHebrewTerminalState | parameter | 32 | -| Parameter 1 of ProcessTerminalState | parameter | 32 | -| Parameter 1 of ProcessToken | parameter | 32 | -| Parameter 1 of QueryInterface | parameter | 32 | -| Parameter 1 of ReadKey | parameter | 32 | -| Parameter 1 of ReliableEnter | parameter | 32 | -| Parameter 1 of ReorderArgumentArray | parameter | 32 | -| Parameter 1 of ReplaceInPlaceAtChunk | parameter | 32 | -| Parameter 1 of RestoreDispatchState | parameter | 32 | -| Parameter 1 of SafeHandleAddRef | parameter | 32 | -| Parameter 1 of SequenceEqual | parameter | 32 | -| Parameter 1 of SerializeSubstitute | parameter | 32 | -| Parameter 1 of SerializeTransitionTime | parameter | 32 | -| Parameter 1 of SetBindOptions | parameter | 32 | -| Parameter 1 of SetCurrentThreadActivityId | parameter | 32 | -| Parameter 1 of SetException | parameter | 32 | -| Parameter 1 of SetNotificationForWaitCompletion | parameter | 32 | -| Parameter 1 of SetValue | parameter | 32 | -| Parameter 1 of SnapForObservation | parameter | 32 | -| Parameter 1 of SplitName | parameter | 32 | -| Parameter 1 of Start | parameter | 32 | -| Parameter 1 of StartAssemblyLoad | parameter | 32 | -| Parameter 1 of Stat | parameter | 32 | -| Parameter 1 of Subtract | parameter | 32 | -| Parameter 1 of Swap | parameter | 32 | -| Parameter 1 of SwapIfGreater | parameter | 32 | -| Parameter 1 of TZif_ParseJulianDay | parameter | 32 | -| Parameter 1 of TZif_ParseMDateRule | parameter | 32 | -| Parameter 1 of TZif_ParsePosixDate | parameter | 32 | -| Parameter 1 of TZif_ParsePosixDateTime | parameter | 32 | -| Parameter 1 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 1 of TZif_ParsePosixName | parameter | 32 | -| Parameter 1 of TZif_ParsePosixOffset | parameter | 32 | -| Parameter 1 of TZif_ParsePosixString | parameter | 32 | -| Parameter 1 of TZif_ParsePosixTime | parameter | 32 | -| Parameter 1 of TZif_ParseRaw | parameter | 32 | -| Parameter 1 of ThrowIfDeserializationInProgress | parameter | 32 | -| Parameter 1 of TryCreate | parameter | 32 | -| Parameter 1 of TryDequeue | parameter | 32 | -| Parameter 1 of TryDequeueSlow | parameter | 32 | -| Parameter 1 of TryDigitGenShortest | parameter | 32 | -| Parameter 1 of TryEnter | parameter | 32 | -| Parameter 1 of TryFindFirstMatchedLane | parameter | 32 | -| Parameter 1 of TryGetArray | parameter | 32 | -| Parameter 1 of TryGetBuffer | parameter | 32 | -| Parameter 1 of TryGetCachedCursorPosition | parameter | 32 | -| Parameter 1 of TryGetCursorPosition | parameter | 32 | -| Parameter 1 of TryGetLocalTzFile | parameter | 32 | -| Parameter 1 of TryGetMemoryManager | parameter | 32 | -| Parameter 1 of TryGetRawMetadata | parameter | 32 | -| Parameter 1 of TryGetString | parameter | 32 | -| Parameter 1 of TryGetSwitch | parameter | 32 | -| Parameter 1 of TryGetTarget | parameter | 32 | -| Parameter 1 of TryGetTimeZoneFromLocalMachine | parameter | 32 | -| Parameter 1 of TryGetTrailByte | parameter | 32 | -| Parameter 1 of TryLoad | parameter | 32 | -| Parameter 1 of TryLoadTzFile | parameter | 32 | -| Parameter 1 of TryNumberToDecimal | parameter | 32 | -| Parameter 1 of TryNumberToInt32 | parameter | 32 | -| Parameter 1 of TryNumberToInt64 | parameter | 32 | -| Parameter 1 of TryNumberToUInt32 | parameter | 32 | -| Parameter 1 of TryNumberToUInt64 | parameter | 32 | -| Parameter 1 of TryOpen | parameter | 32 | -| Parameter 1 of TryOpenExisting | parameter | 32 | -| Parameter 1 of TryParse | parameter | 32 | -| Parameter 1 of TryParseByteD | parameter | 32 | -| Parameter 1 of TryParseByteN | parameter | 32 | -| Parameter 1 of TryParseByteX | parameter | 32 | -| Parameter 1 of TryParseDateTimeG | parameter | 32 | -| Parameter 1 of TryParseDateTimeOffsetDefault | parameter | 32 | -| Parameter 1 of TryParseDateTimeOffsetO | parameter | 32 | -| Parameter 1 of TryParseExactB | parameter | 32 | -| Parameter 1 of TryParseExactD | parameter | 32 | -| Parameter 1 of TryParseExactN | parameter | 32 | -| Parameter 1 of TryParseExactP | parameter | 32 | -| Parameter 1 of TryParseExactX | parameter | 32 | -| Parameter 1 of TryParseGuid | parameter | 32 | -| Parameter 1 of TryParseGuidCore | parameter | 32 | -| Parameter 1 of TryParseGuidN | parameter | 32 | -| Parameter 1 of TryParseHebrewNumber | parameter | 32 | -| Parameter 1 of TryParseHex | parameter | 32 | -| Parameter 1 of TryParseInt16D | parameter | 32 | -| Parameter 1 of TryParseInt16N | parameter | 32 | -| Parameter 1 of TryParseInt32D | parameter | 32 | -| Parameter 1 of TryParseInt32N | parameter | 32 | -| Parameter 1 of TryParseInt64D | parameter | 32 | -| Parameter 1 of TryParseInt64N | parameter | 32 | -| Parameter 1 of TryParseNormalAsFloatingPoint | parameter | 32 | -| Parameter 1 of TryParseNumber | parameter | 32 | -| Parameter 1 of TryParseSByteD | parameter | 32 | -| Parameter 1 of TryParseSByteN | parameter | 32 | -| Parameter 1 of TryParseThrowFormatException | parameter | 32 | -| Parameter 1 of TryParseTimeSpanBigG | parameter | 32 | -| Parameter 1 of TryParseTimeSpanC | parameter | 32 | -| Parameter 1 of TryParseTimeSpanConstant | parameter | 32 | -| Parameter 1 of TryParseTimeSpanFraction | parameter | 32 | -| Parameter 1 of TryParseTimeSpanLittleG | parameter | 32 | -| Parameter 1 of TryParseUInt16D | parameter | 32 | -| Parameter 1 of TryParseUInt16N | parameter | 32 | -| Parameter 1 of TryParseUInt16X | parameter | 32 | -| Parameter 1 of TryParseUInt32D | parameter | 32 | -| Parameter 1 of TryParseUInt32N | parameter | 32 | -| Parameter 1 of TryParseUInt32X | parameter | 32 | -| Parameter 1 of TryParseUInt64D | parameter | 32 | -| Parameter 1 of TryParseUInt64N | parameter | 32 | -| Parameter 1 of TryParseUInt64X | parameter | 32 | -| Parameter 1 of TryPeek | parameter | 32 | -| Parameter 1 of TryRead | parameter | 32 | -| Parameter 1 of TryReadDoubleBigEndian | parameter | 32 | -| Parameter 1 of TryReadDoubleLittleEndian | parameter | 32 | -| Parameter 1 of TryReadInt16BigEndian | parameter | 32 | -| Parameter 1 of TryReadInt16LittleEndian | parameter | 32 | -| Parameter 1 of TryReadInt32BigEndian | parameter | 32 | -| Parameter 1 of TryReadInt32LittleEndian | parameter | 32 | -| Parameter 1 of TryReadInt64BigEndian | parameter | 32 | -| Parameter 1 of TryReadInt64LittleEndian | parameter | 32 | -| Parameter 1 of TryReadSingleBigEndian | parameter | 32 | -| Parameter 1 of TryReadSingleLittleEndian | parameter | 32 | -| Parameter 1 of TryReadUInt16BigEndian | parameter | 32 | -| Parameter 1 of TryReadUInt16LittleEndian | parameter | 32 | -| Parameter 1 of TryReadUInt32BigEndian | parameter | 32 | -| Parameter 1 of TryReadUInt32LittleEndian | parameter | 32 | -| Parameter 1 of TryReadUInt64BigEndian | parameter | 32 | -| Parameter 1 of TryReadUInt64LittleEndian | parameter | 32 | -| Parameter 1 of TryResolveStateMachineMethod | parameter | 32 | -| Parameter 1 of TryRunShortest | parameter | 32 | -| Parameter 1 of TrySteal | parameter | 32 | -| Parameter 1 of TryTake | parameter | 32 | -| Parameter 1 of TryWrite | parameter | 32 | -| Parameter 1 of UInt32ToNumber | parameter | 32 | -| Parameter 1 of UInt64ToNumber | parameter | 32 | -| Parameter 1 of Unscale | parameter | 32 | -| Parameter 1 of VarDecCmp | parameter | 32 | -| Parameter 1 of VarDecCmpSub | parameter | 32 | -| Parameter 1 of VarDecDiv | parameter | 32 | -| Parameter 1 of VarDecFromR4 | parameter | 32 | -| Parameter 1 of VarDecFromR8 | parameter | 32 | -| Parameter 1 of VarDecMod | parameter | 32 | -| Parameter 1 of VarDecModFull | parameter | 32 | -| Parameter 1 of VarDecMul | parameter | 32 | -| Parameter 1 of Widen | parameter | 32 | -| Parameter 1 of Write | parameter | 32 | -| Parameter 1 of WriteEvent | parameter | 32 | -| Parameter 1 of WriteEventRaw | parameter | 32 | -| Parameter 1 of YearMonthAdjustment | parameter | 32 | -| Parameter 1 of _BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of _GetScopeProps | parameter | 32 | -| Parameter 1 of _Memmove | parameter | 32 | -| Parameter 1 of __BulkMoveWithWriteBarrier | parameter | 32 | -| Parameter 1 of nGetPrimaryAndSecondary | parameter | 32 | -| Parameter 2 of g__SoftwareFallback\|42_0 | parameter | 32 | -| Parameter 2 of g__BufferUntil\|83_0 | parameter | 32 | -| Parameter 2 of Add | parameter | 32 | -| Parameter 2 of AddDivisor | parameter | 32 | -| Parameter 2 of AddIfNotPresent | parameter | 32 | -| Parameter 2 of AddNum | parameter | 32 | -| Parameter 2 of AddResourceSet | parameter | 32 | -| Parameter 2 of AddSep | parameter | 32 | -| Parameter 2 of AddTitlecaseLetter | parameter | 32 | -| Parameter 2 of Advise | parameter | 32 | -| Parameter 2 of AllocateStringForNameIndex | parameter | 32 | -| Parameter 2 of AttributeUsageCheck | parameter | 32 | -| Parameter 2 of AwaitOnCompleted | parameter | 32 | -| Parameter 2 of AwaitUnsafeOnCompleted | parameter | 32 | -| Parameter 2 of BigMul | parameter | 32 | -| Parameter 2 of BiggestPowerTen | parameter | 32 | -| Parameter 2 of ChangeCaseCommon | parameter | 32 | -| Parameter 2 of CheckVMForIOPacket | parameter | 32 | -| Parameter 2 of CommonPrefixWith | parameter | 32 | -| Parameter 2 of CompareIgnoreCaseInvariantMode | parameter | 32 | -| Parameter 2 of CompareStringIgnoreCase | parameter | 32 | -| Parameter 2 of CompareStringIgnoreCaseNonAscii | parameter | 32 | -| Parameter 2 of ConfigureFormatR | parameter | 32 | -| Parameter 2 of ContinueTryEnter | parameter | 32 | -| Parameter 2 of ConvertGregorianToHijri | parameter | 32 | -| Parameter 2 of ConvertSmpToUtf16 | parameter | 32 | -| Parameter 2 of ConvertUtcToTimeZone | parameter | 32 | -| Parameter 2 of CopyToTempBufferWithoutWhiteSpace | parameter | 32 | -| Parameter 2 of CountOccurrences | parameter | 32 | -| Parameter 2 of CreateActivityPathGuid | parameter | 32 | -| Parameter 2 of CreateAndGetBoundaries | parameter | 32 | -| Parameter 2 of CreateInstance | parameter | 32 | -| Parameter 2 of CreationOptionsFromContinuationOptions | parameter | 32 | -| Parameter 2 of DecodeFirstRune | parameter | 32 | -| Parameter 2 of DecodeFromUtf8 | parameter | 32 | -| Parameter 2 of DecodeFromUtf16 | parameter | 32 | -| Parameter 2 of DecodeLastFromUtf8 | parameter | 32 | -| Parameter 2 of DecodeLastFromUtf16 | parameter | 32 | -| Parameter 2 of Decompose | parameter | 32 | -| Parameter 2 of Deconstruct | parameter | 32 | -| Parameter 2 of Dequeue | parameter | 32 | -| Parameter 2 of DivByConst | parameter | 32 | -| Parameter 2 of DivMod | parameter | 32 | -| Parameter 2 of DivRem | parameter | 32 | -| Parameter 2 of DrainLeftoverDataForGetByteCount | parameter | 32 | -| Parameter 2 of DrainLeftoverDataForGetCharCount | parameter | 32 | -| Parameter 2 of EncodeObject | parameter | 32 | -| Parameter 2 of EnqueueSlow | parameter | 32 | -| Parameter 2 of EnsureInitialized | parameter | 32 | -| Parameter 2 of EnsureInitializedCore | parameter | 32 | -| Parameter 2 of Enum | parameter | 32 | -| Parameter 2 of EnumCustomAttributes | parameter | 32 | -| Parameter 2 of EnumEvents | parameter | 32 | -| Parameter 2 of EnumFields | parameter | 32 | -| Parameter 2 of EnumNestedTypes | parameter | 32 | -| Parameter 2 of EnumParams | parameter | 32 | -| Parameter 2 of EnumProperties | parameter | 32 | -| Parameter 2 of EscapeAsciiChar | parameter | 32 | -| Parameter 2 of EventActivityIdControl | parameter | 32 | -| Parameter 2 of EventWriteTransfer | parameter | 32 | -| Parameter 2 of ExpandPredefinedFormat | parameter | 32 | -| Parameter 2 of FilterHelper | parameter | 32 | -| Parameter 2 of FindConnectionPoint | parameter | 32 | -| Parameter 2 of FindEntry | parameter | 32 | -| Parameter 2 of FmtClassUpdateNativeInternal | parameter | 32 | -| Parameter 2 of FromUtf16 | parameter | 32 | -| Parameter 2 of GenerateMetadata | parameter | 32 | -| Parameter 2 of GenerateMetadataForProperty | parameter | 32 | -| Parameter 2 of GenerateMetadataForTypeV2 | parameter | 32 | -| Parameter 2 of GenerateMetadataV2 | parameter | 32 | -| Parameter 2 of GetAdjustmentRuleForAmbiguousOffsets | parameter | 32 | -| Parameter 2 of GetAdjustmentRuleForTime | parameter | 32 | -| Parameter 2 of GetBoundaries | parameter | 32 | -| Parameter 2 of GetCachedPowerForBinaryExponentRange | parameter | 32 | -| Parameter 2 of GetClassLayout | parameter | 32 | -| Parameter 2 of GetCodeInfo | parameter | 32 | -| Parameter 2 of GetContainingTypeLib | parameter | 32 | -| Parameter 2 of GetCurrentContextInfo | parameter | 32 | -| Parameter 2 of GetCustData | parameter | 32 | -| Parameter 2 of GetCustomAttributeProps | parameter | 32 | -| Parameter 2 of GetCustomAttributes | parameter | 32 | -| Parameter 2 of GetDate | parameter | 32 | -| Parameter 2 of GetDayOfMN | parameter | 32 | -| Parameter 2 of GetDayOfNM | parameter | 32 | -| Parameter 2 of GetDayOfNN | parameter | 32 | -| Parameter 2 of GetDefaultValue | parameter | 32 | -| Parameter 2 of GetDocumentation | parameter | 32 | -| Parameter 2 of GetDocumentation2 | parameter | 32 | -| Parameter 2 of GetDynamicOrStaticVariables | parameter | 32 | -| Parameter 2 of GetElement | parameter | 32 | -| Parameter 2 of GetElementNoThrow | parameter | 32 | -| Parameter 2 of GetEnumData | parameter | 32 | -| Parameter 2 of GetEventProps | parameter | 32 | -| Parameter 2 of GetFieldDefProps | parameter | 32 | -| Parameter 2 of GetFuncCustData | parameter | 32 | -| Parameter 2 of GetFuncDesc | parameter | 32 | -| Parameter 2 of GetGenericParamProps | parameter | 32 | -| Parameter 2 of GetIUnknownImpl | parameter | 32 | -| Parameter 2 of GetImplTypeCustData | parameter | 32 | -| Parameter 2 of GetImplTypeFlags | parameter | 32 | -| Parameter 2 of GetIndexOfNextTokenAfterSeconds | parameter | 32 | -| Parameter 2 of GetInterface | parameter | 32 | -| Parameter 2 of GetJapaneseEraStartDate | parameter | 32 | -| Parameter 2 of GetKeyFromCharValue | parameter | 32 | -| Parameter 2 of GetLibStatistics | parameter | 32 | -| Parameter 2 of GetLocaleInfoGroupingSizes | parameter | 32 | -| Parameter 2 of GetLocaleInfoInt | parameter | 32 | -| Parameter 2 of GetMarshalAs | parameter | 32 | -| Parameter 2 of GetMetadataLengthForNamedTypeV2 | parameter | 32 | -| Parameter 2 of GetMops | parameter | 32 | -| Parameter 2 of GetObject | parameter | 32 | -| Parameter 2 of GetObjectParam | parameter | 32 | -| Parameter 2 of GetObjectStartLength | parameter | 32 | -| Parameter 2 of GetPEKind | parameter | 32 | -| Parameter 2 of GetPInvokeMap | parameter | 32 | -| Parameter 2 of GetParamDefProps | parameter | 32 | -| Parameter 2 of GetPointerToFirstInvalidByte | parameter | 32 | -| Parameter 2 of GetPointerToFirstInvalidChar | parameter | 32 | -| Parameter 2 of GetPropertyProps | parameter | 32 | -| Parameter 2 of GetRefTypeInfo | parameter | 32 | -| Parameter 2 of GetRefTypeOfImplType | parameter | 32 | -| Parameter 2 of GetRegularToken | parameter | 32 | -| Parameter 2 of GetResource | parameter | 32 | -| Parameter 2 of GetResourceData | parameter | 32 | -| Parameter 2 of GetSeparatorToken | parameter | 32 | -| Parameter 2 of GetSessionInfo | parameter | 32 | -| Parameter 2 of GetSessionInfoCallback | parameter | 32 | -| Parameter 2 of GetStackTracesDeepCopy | parameter | 32 | -| Parameter 2 of GetTime | parameter | 32 | -| Parameter 2 of GetTimeOfLastChange | parameter | 32 | -| Parameter 2 of GetTimePrecise | parameter | 32 | -| Parameter 2 of GetTypeInfo | parameter | 32 | -| Parameter 2 of GetTypeInfoOfGuid | parameter | 32 | -| Parameter 2 of GetTypeInfoType | parameter | 32 | -| Parameter 2 of GetUnescapeSequence | parameter | 32 | -| Parameter 2 of GetUnicodeCategoryInternal | parameter | 32 | -| Parameter 2 of GetUtcOffsetFromUniversalTime | parameter | 32 | -| Parameter 2 of GetUtcOffsetFromUtc | parameter | 32 | -| Parameter 2 of GetUtf16SurrogatesFromSupplementaryPlaneScalar | parameter | 32 | -| Parameter 2 of GetVarCustData | parameter | 32 | -| Parameter 2 of GetVarDesc | parameter | 32 | -| Parameter 2 of GetVarIndexOfMemId | parameter | 32 | -| Parameter 2 of GetVersion | parameter | 32 | -| Parameter 2 of GrabInts | parameter | 32 | -| Parameter 2 of GrabLongs | parameter | 32 | -| Parameter 2 of IndexOf | parameter | 32 | -| Parameter 2 of IndexOfAny | parameter | 32 | -| Parameter 2 of Initialize | parameter | 32 | -| Parameter 2 of InternalDefineDynamicAssembly | parameter | 32 | -| Parameter 2 of InternalFallback | parameter | 32 | -| Parameter 2 of InternalFallbackGetByteCount | parameter | 32 | -| Parameter 2 of InternalLoad | parameter | 32 | -| Parameter 2 of InternalTryGetRawMetadata | parameter | 32 | -| Parameter 2 of Invoke | parameter | 32 | -| Parameter 2 of IsDigit | parameter | 32 | -| Parameter 2 of IsInstanceOfInterface | parameter | 32 | -| Parameter 2 of LastIndexOf | parameter | 32 | -| Parameter 2 of LastIndexOfAny | parameter | 32 | -| Parameter 2 of Lex | parameter | 32 | -| Parameter 2 of LoadObject | parameter | 32 | -| Parameter 2 of LoadObjectV2 | parameter | 32 | -| Parameter 2 of MakeSeparatorList | parameter | 32 | -| Parameter 2 of MapBufferToConsoleKey | parameter | 32 | -| Parameter 2 of MatchAbbreviatedDayName | parameter | 32 | -| Parameter 2 of MatchAbbreviatedMonthName | parameter | 32 | -| Parameter 2 of MatchAbbreviatedTimeMark | parameter | 32 | -| Parameter 2 of MatchDayName | parameter | 32 | -| Parameter 2 of MatchEraName | parameter | 32 | -| Parameter 2 of MatchHebrewDigits | parameter | 32 | -| Parameter 2 of MatchLongestWords | parameter | 32 | -| Parameter 2 of MatchMonthName | parameter | 32 | -| Parameter 2 of MatchTimeMark | parameter | 32 | -| Parameter 2 of Multiply | parameter | 32 | -| Parameter 2 of NormalizeDayOfWeek | parameter | 32 | -| Parameter 2 of NoteChangeTime | parameter | 32 | -| Parameter 2 of Overlaps | parameter | 32 | -| Parameter 2 of ParseAttributeArguments | parameter | 32 | -| Parameter 2 of ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 2 of ParseByFormat | parameter | 32 | -| Parameter 2 of ParseComponent | parameter | 32 | -| Parameter 2 of ParseDigits | parameter | 32 | -| Parameter 2 of ParseExactDigits | parameter | 32 | -| Parameter 2 of ParseFormatR | parameter | 32 | -| Parameter 2 of ParseFractionExact | parameter | 32 | -| Parameter 2 of ParseInt | parameter | 32 | -| Parameter 2 of ParseTime | parameter | 32 | -| Parameter 2 of ParseTimeZoneOffset | parameter | 32 | -| Parameter 2 of ProcessDateTimeSuffix | parameter | 32 | -| Parameter 2 of ProcessHebrewTerminalState | parameter | 32 | -| Parameter 2 of ProcessTerminalState | parameter | 32 | -| Parameter 2 of ProcessTerminal_D | parameter | 32 | -| Parameter 2 of ProcessTerminal_DHMSF | parameter | 32 | -| Parameter 2 of ProcessTerminal_HM | parameter | 32 | -| Parameter 2 of ProcessTerminal_HMS_F_D | parameter | 32 | -| Parameter 2 of ProcessTerminal_HM_S_D | parameter | 32 | -| Parameter 2 of ProcessToken | parameter | 32 | -| Parameter 2 of QueryInterface | parameter | 32 | -| Parameter 2 of Read | parameter | 32 | -| Parameter 2 of ReadBuffer | parameter | 32 | -| Parameter 2 of RelativePathTo | parameter | 32 | -| Parameter 2 of ReleaseSemaphore | parameter | 32 | -| Parameter 2 of ReliableEnterTimeout | parameter | 32 | -| Parameter 2 of Remove | parameter | 32 | -| Parameter 2 of RemoveRelativeSegments | parameter | 32 | -| Parameter 2 of ReplaceInPlaceAtChunk | parameter | 32 | -| Parameter 2 of RequestLicKey | parameter | 32 | -| Parameter 2 of ResolveToken | parameter | 32 | -| Parameter 2 of RunForThreadPoolUnsafe | parameter | 32 | -| Parameter 2 of SequenceCompareTo | parameter | 32 | -| Parameter 2 of SnapForObservation | parameter | 32 | -| Parameter 2 of SplitName | parameter | 32 | -| Parameter 2 of SubtractDivisor | parameter | 32 | -| Parameter 2 of TZif_ParseJulianDay | parameter | 32 | -| Parameter 2 of TZif_ParseMDateRule | parameter | 32 | -| Parameter 2 of TZif_ParsePosixDateTime | parameter | 32 | -| Parameter 2 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 2 of TZif_ParseRaw | parameter | 32 | -| Parameter 2 of TimeToLunar | parameter | 32 | -| Parameter 2 of ToUpperSurrogate | parameter | 32 | -| Parameter 2 of ToUtf16 | parameter | 32 | -| Parameter 2 of Tokenize | parameter | 32 | -| Parameter 2 of TryAddTicks | parameter | 32 | -| Parameter 2 of TryAdjustYear | parameter | 32 | -| Parameter 2 of TryCopyTo | parameter | 32 | -| Parameter 2 of TryCreate | parameter | 32 | -| Parameter 2 of TryDecodeFromUtf16 | parameter | 32 | -| Parameter 2 of TryDequeueSlow | parameter | 32 | -| Parameter 2 of TryDigitGenShortest | parameter | 32 | -| Parameter 2 of TryDrainRemainingDataForGetBytes | parameter | 32 | -| Parameter 2 of TryDrainRemainingDataForGetChars | parameter | 32 | -| Parameter 2 of TryEncodeToUtf8 | parameter | 32 | -| Parameter 2 of TryEncodeToUtf16 | parameter | 32 | -| Parameter 2 of TryEnter | parameter | 32 | -| Parameter 2 of TryFindFirstMatchedLane | parameter | 32 | -| Parameter 2 of TryFormat | parameter | 32 | -| Parameter 2 of TryFormatDateTimeL | parameter | 32 | -| Parameter 2 of TryFormatDateTimeR | parameter | 32 | -| Parameter 2 of TryFormatDecimalE | parameter | 32 | -| Parameter 2 of TryFormatDecimalF | parameter | 32 | -| Parameter 2 of TryFormatDecimalG | parameter | 32 | -| Parameter 2 of TryFormatFloatingPoint | parameter | 32 | -| Parameter 2 of TryFormatInt64Default | parameter | 32 | -| Parameter 2 of TryFormatInt64MultipleDigits | parameter | 32 | -| Parameter 2 of TryFormatUInt32SingleDigit | parameter | 32 | -| Parameter 2 of TryFormatUInt64 | parameter | 32 | -| Parameter 2 of TryFormatUInt64Default | parameter | 32 | -| Parameter 2 of TryFormatUInt64MultipleDigits | parameter | 32 | -| Parameter 2 of TryFromBase64Chars | parameter | 32 | -| Parameter 2 of TryFromBase64String | parameter | 32 | -| Parameter 2 of TryGetBits | parameter | 32 | -| Parameter 2 of TryGetByteCount | parameter | 32 | -| Parameter 2 of TryGetEntry | parameter | 32 | -| Parameter 2 of TryGetExport | parameter | 32 | -| Parameter 2 of TryGetHomeDirectoryFromPasswd | parameter | 32 | -| Parameter 2 of TryGetMemoryManager | parameter | 32 | -| Parameter 2 of TryGetRawMetadata | parameter | 32 | -| Parameter 2 of TryGetRuneAt | parameter | 32 | -| Parameter 2 of TryGetString | parameter | 32 | -| Parameter 2 of TryGetStringValue | parameter | 32 | -| Parameter 2 of TryGetTimeZone | parameter | 32 | -| Parameter 2 of TryGetTimeZoneFromLocalMachine | parameter | 32 | -| Parameter 2 of TryGetValue | parameter | 32 | -| Parameter 2 of TryGetValueWorker | parameter | 32 | -| Parameter 2 of TryLoadTzFile | parameter | 32 | -| Parameter 2 of TryParse | parameter | 32 | -| Parameter 2 of TryParseByteD | parameter | 32 | -| Parameter 2 of TryParseByteN | parameter | 32 | -| Parameter 2 of TryParseByteX | parameter | 32 | -| Parameter 2 of TryParseDateTimeG | parameter | 32 | -| Parameter 2 of TryParseDateTimeOffsetDefault | parameter | 32 | -| Parameter 2 of TryParseDateTimeOffsetO | parameter | 32 | -| Parameter 2 of TryParseDateTimeOffsetR | parameter | 32 | -| Parameter 2 of TryParseExact | parameter | 32 | -| Parameter 2 of TryParseGuidCore | parameter | 32 | -| Parameter 2 of TryParseGuidN | parameter | 32 | -| Parameter 2 of TryParseHebrewNumber | parameter | 32 | -| Parameter 2 of TryParseHex | parameter | 32 | -| Parameter 2 of TryParseInt16D | parameter | 32 | -| Parameter 2 of TryParseInt16N | parameter | 32 | -| Parameter 2 of TryParseInt32D | parameter | 32 | -| Parameter 2 of TryParseInt32N | parameter | 32 | -| Parameter 2 of TryParseInt64D | parameter | 32 | -| Parameter 2 of TryParseInt64N | parameter | 32 | -| Parameter 2 of TryParseNormalAsFloatingPoint | parameter | 32 | -| Parameter 2 of TryParseNumber | parameter | 32 | -| Parameter 2 of TryParseSByteD | parameter | 32 | -| Parameter 2 of TryParseSByteN | parameter | 32 | -| Parameter 2 of TryParseThrowFormatException | parameter | 32 | -| Parameter 2 of TryParseTimeSpanBigG | parameter | 32 | -| Parameter 2 of TryParseTimeSpanC | parameter | 32 | -| Parameter 2 of TryParseTimeSpanFraction | parameter | 32 | -| Parameter 2 of TryParseTimeSpanLittleG | parameter | 32 | -| Parameter 2 of TryParseUInt16D | parameter | 32 | -| Parameter 2 of TryParseUInt16N | parameter | 32 | -| Parameter 2 of TryParseUInt16X | parameter | 32 | -| Parameter 2 of TryParseUInt32D | parameter | 32 | -| Parameter 2 of TryParseUInt32HexNumberStyle | parameter | 32 | -| Parameter 2 of TryParseUInt32N | parameter | 32 | -| Parameter 2 of TryParseUInt32X | parameter | 32 | -| Parameter 2 of TryParseUInt64D | parameter | 32 | -| Parameter 2 of TryParseUInt64HexNumberStyle | parameter | 32 | -| Parameter 2 of TryParseUInt64N | parameter | 32 | -| Parameter 2 of TryParseUInt64X | parameter | 32 | -| Parameter 2 of TryRunDouble | parameter | 32 | -| Parameter 2 of TryRunHalf | parameter | 32 | -| Parameter 2 of TryRunShortest | parameter | 32 | -| Parameter 2 of TryRunSingle | parameter | 32 | -| Parameter 2 of TryStringToNumber | parameter | 32 | -| Parameter 2 of TryToBase64Chars | parameter | 32 | -| Parameter 2 of UInt64x64To128 | parameter | 32 | -| Parameter 2 of Unscale | parameter | 32 | -| Parameter 2 of WaitOnEvent | parameter | 32 | -| Parameter 2 of Widen | parameter | 32 | -| Parameter 2 of Write | parameter | 32 | -| Parameter 2 of WriteEventRaw | parameter | 32 | -| Parameter 2 of WriteImpl | parameter | 32 | -| Parameter 2 of WriteMultiMerge | parameter | 32 | -| Parameter 2 of WriteMultiMergeInner | parameter | 32 | -| Parameter 2 of WriteToAllListeners | parameter | 32 | -| Parameter 2 of WriteToBuffer | parameter | 32 | -| Parameter 2 of YearMonthAdjustment | parameter | 32 | -| Parameter 2 of _GetClassLayout | parameter | 32 | -| Parameter 2 of _GetCustomAttributeProps | parameter | 32 | -| Parameter 2 of _GetDefaultValue | parameter | 32 | -| Parameter 2 of _GetFieldDefProps | parameter | 32 | -| Parameter 2 of _GetFieldMarshal | parameter | 32 | -| Parameter 2 of _GetGenericParamProps | parameter | 32 | -| Parameter 2 of _GetMarshalAs | parameter | 32 | -| Parameter 2 of _GetMemberRefProps | parameter | 32 | -| Parameter 2 of _GetPInvokeMap | parameter | 32 | -| Parameter 2 of _GetParamDefProps | parameter | 32 | -| Parameter 2 of _GetParentToken | parameter | 32 | -| Parameter 2 of _GetSigOfFieldDef | parameter | 32 | -| Parameter 2 of _GetSigOfMethodDef | parameter | 32 | -| Parameter 2 of _GetSignatureFromToken | parameter | 32 | -| Parameter 2 of _LoadObjectV2 | parameter | 32 | -| Parameter 2 of _ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 2 of ctor>g__TryConvertFromInvariantString\|2_0 | parameter | 32 | -| Parameter 3 of .ctor | parameter | 32 | -| Parameter 3 of b__37_0 | parameter | 32 | -| Parameter 3 of g__AppendToStdInReaderUntil\|83_1 | parameter | 32 | -| Parameter 3 of g__BufferUntil\|83_0 | parameter | 32 | -| Parameter 3 of AccumulateDecimalDigitsIntoBigInteger | parameter | 32 | -| Parameter 3 of AddressOfMember | parameter | 32 | -| Parameter 3 of AtomicStateUpdate | parameter | 32 | -| Parameter 3 of BindToMethod | parameter | 32 | -| Parameter 3 of BindToObject | parameter | 32 | -| Parameter 3 of BindToStorage | parameter | 32 | -| Parameter 3 of BindType | parameter | 32 | -| Parameter 3 of CheckNewValue | parameter | 32 | -| Parameter 3 of CompareExchange | parameter | 32 | -| Parameter 3 of ComposeWith | parameter | 32 | -| Parameter 3 of ComputeVtables | parameter | 32 | -| Parameter 3 of ContinueTryEnterWithThreadTracking | parameter | 32 | -| Parameter 3 of ConvertGregorianToHijri | parameter | 32 | -| Parameter 3 of ConvertHijriToGregorian | parameter | 32 | -| Parameter 3 of ConvertToNative | parameter | 32 | -| Parameter 3 of CopyToTempBufferWithoutWhiteSpace | parameter | 32 | -| Parameter 3 of CreateCaObject | parameter | 32 | -| Parameter 3 of CreateInstance | parameter | 32 | -| Parameter 3 of CreateInstanceLic | parameter | 32 | -| Parameter 3 of CreateMutexCore | parameter | 32 | -| Parameter 3 of DecodeFirstRune | parameter | 32 | -| Parameter 3 of DecodeObject | parameter | 32 | -| Parameter 3 of Decompose | parameter | 32 | -| Parameter 3 of Deconstruct | parameter | 32 | -| Parameter 3 of DivByConst | parameter | 32 | -| Parameter 3 of DivRem | parameter | 32 | -| Parameter 3 of DoAnsiConversion | parameter | 32 | -| Parameter 3 of Dragon4Double | parameter | 32 | -| Parameter 3 of Dragon4Half | parameter | 32 | -| Parameter 3 of Dragon4Single | parameter | 32 | -| Parameter 3 of DrainLeftoverDataForGetChars | parameter | 32 | -| Parameter 3 of EncodeObject | parameter | 32 | -| Parameter 3 of EncodeRune | parameter | 32 | -| Parameter 3 of Enum | parameter | 32 | -| Parameter 3 of EnumCalendarInfo | parameter | 32 | -| Parameter 3 of EnumDatePatterns | parameter | 32 | -| Parameter 3 of EnumEraNames | parameter | 32 | -| Parameter 3 of EnumMonthNames | parameter | 32 | -| Parameter 3 of ExpandPredefinedFormat | parameter | 32 | -| Parameter 3 of FilterHelper | parameter | 32 | -| Parameter 3 of FromUtf16 | parameter | 32 | -| Parameter 3 of GenerateMetadataForNamedTypeV2 | parameter | 32 | -| Parameter 3 of GetAdjustmentRuleForTime | parameter | 32 | -| Parameter 3 of GetBoundaries | parameter | 32 | -| Parameter 3 of GetCalendarInfo | parameter | 32 | -| Parameter 3 of GetClassLayout | parameter | 32 | -| Parameter 3 of GetCodeInfo | parameter | 32 | -| Parameter 3 of GetControlCharacters | parameter | 32 | -| Parameter 3 of GetCurrentContextInfo | parameter | 32 | -| Parameter 3 of GetCustomAttributeProps | parameter | 32 | -| Parameter 3 of GetDataFromController | parameter | 32 | -| Parameter 3 of GetDate | parameter | 32 | -| Parameter 3 of GetDefaultValue | parameter | 32 | -| Parameter 3 of GetDisplayName | parameter | 32 | -| Parameter 3 of GetDocumentation | parameter | 32 | -| Parameter 3 of GetDocumentation2 | parameter | 32 | -| Parameter 3 of GetDynamicOrStaticVariables | parameter | 32 | -| Parameter 3 of GetEventProps | parameter | 32 | -| Parameter 3 of GetFieldOffset | parameter | 32 | -| Parameter 3 of GetFloatingPointMaxDigitsAndPrecision | parameter | 32 | -| Parameter 3 of GetFuncCustData | parameter | 32 | -| Parameter 3 of GetFuncIndexOfMemId | parameter | 32 | -| Parameter 3 of GetImplTypeCustData | parameter | 32 | -| Parameter 3 of GetJapaneseEraStartDate | parameter | 32 | -| Parameter 3 of GetKeyFromCharValue | parameter | 32 | -| Parameter 3 of GetLocaleInfoGroupingSizes | parameter | 32 | -| Parameter 3 of GetMarshalAs | parameter | 32 | -| Parameter 3 of GetPInvokeMap | parameter | 32 | -| Parameter 3 of GetParamCustData | parameter | 32 | -| Parameter 3 of GetParamDefProps | parameter | 32 | -| Parameter 3 of GetParameters | parameter | 32 | -| Parameter 3 of GetPointerToFirstInvalidByte | parameter | 32 | -| Parameter 3 of GetPointerToFirstInvalidChar | parameter | 32 | -| Parameter 3 of GetPropertyOrFieldData | parameter | 32 | -| Parameter 3 of GetPropertyProps | parameter | 32 | -| Parameter 3 of GetResourceData | parameter | 32 | -| Parameter 3 of GetSeparatorToken | parameter | 32 | -| Parameter 3 of GetTime | parameter | 32 | -| Parameter 3 of GetTimeOfLastChange | parameter | 32 | -| Parameter 3 of GetTimePrecise | parameter | 32 | -| Parameter 3 of GetType | parameter | 32 | -| Parameter 3 of GetTypeByName | parameter | 32 | -| Parameter 3 of GetUtcOffsetFromUtc | parameter | 32 | -| Parameter 3 of GetVarCustData | parameter | 32 | -| Parameter 3 of GetVersion | parameter | 32 | -| Parameter 3 of InitHash | parameter | 32 | -| Parameter 3 of Initialize | parameter | 32 | -| Parameter 3 of InternalFallback | parameter | 32 | -| Parameter 3 of Invoke | parameter | 32 | -| Parameter 3 of Lex | parameter | 32 | -| Parameter 3 of MakeRoom | parameter | 32 | -| Parameter 3 of MakeSeparatorList | parameter | 32 | -| Parameter 3 of MapBufferToConsoleKey | parameter | 32 | -| Parameter 3 of MatchSpecifiedWords | parameter | 32 | -| Parameter 3 of Parse | parameter | 32 | -| Parameter 3 of ParseAttributeArguments | parameter | 32 | -| Parameter 3 of ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 3 of ParseComponent | parameter | 32 | -| Parameter 3 of ParseDigits | parameter | 32 | -| Parameter 3 of ParseExactDigits | parameter | 32 | -| Parameter 3 of ParseISO8601 | parameter | 32 | -| Parameter 3 of ParseInt | parameter | 32 | -| Parameter 3 of Poll | parameter | 32 | -| Parameter 3 of PopulateLiteralFields | parameter | 32 | -| Parameter 3 of PopulateRtFields | parameter | 32 | -| Parameter 3 of ProcessHebrewTerminalState | parameter | 32 | -| Parameter 3 of ProcessTerminalState | parameter | 32 | -| Parameter 3 of ReadAsyncInternal | parameter | 32 | -| Parameter 3 of ReadDirR | parameter | 32 | -| Parameter 3 of Reduce | parameter | 32 | -| Parameter 3 of Remove | parameter | 32 | -| Parameter 3 of ResolveAssembly | parameter | 32 | -| Parameter 3 of ResolveToken | parameter | 32 | -| Parameter 3 of RunCallback | parameter | 32 | -| Parameter 3 of ScanRepeatChar | parameter | 32 | -| Parameter 3 of SnapForObservation | parameter | 32 | -| Parameter 3 of StringToInt | parameter | 32 | -| Parameter 3 of StringToLong | parameter | 32 | -| Parameter 3 of TZif_ParseMDateRule | parameter | 32 | -| Parameter 3 of TZif_ParsePosixDateTime | parameter | 32 | -| Parameter 3 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 3 of TZif_ParseRaw | parameter | 32 | -| Parameter 3 of TimeToLunar | parameter | 32 | -| Parameter 3 of ToUpperSurrogate | parameter | 32 | -| Parameter 3 of ToUtf16 | parameter | 32 | -| Parameter 3 of Tokenize | parameter | 32 | -| Parameter 3 of TryDecodeFromUtf16 | parameter | 32 | -| Parameter 3 of TryDequeueSlow | parameter | 32 | -| Parameter 3 of TryDigitGenCounted | parameter | 32 | -| Parameter 3 of TryDrainLeftoverDataForGetBytes | parameter | 32 | -| Parameter 3 of TryFormat | parameter | 32 | -| Parameter 3 of TryFormatDateTimeG | parameter | 32 | -| Parameter 3 of TryFormatDateTimeO | parameter | 32 | -| Parameter 3 of TryFormatInt64 | parameter | 32 | -| Parameter 3 of TryFormatInt64D | parameter | 32 | -| Parameter 3 of TryFormatInt64N | parameter | 32 | -| Parameter 3 of TryFormatO | parameter | 32 | -| Parameter 3 of TryFormatR | parameter | 32 | -| Parameter 3 of TryGetEntry | parameter | 32 | -| Parameter 3 of TryGetMemoryManager | parameter | 32 | -| Parameter 3 of TryGetSpan | parameter | 32 | -| Parameter 3 of TryGetSpecialConsoleKey | parameter | 32 | -| Parameter 3 of TryGetString | parameter | 32 | -| Parameter 3 of TryGetTimeZone | parameter | 32 | -| Parameter 3 of TryGetTimeZoneFromLocalMachine | parameter | 32 | -| Parameter 3 of TryInternalFallbackGetBytes | parameter | 32 | -| Parameter 3 of TryJoin | parameter | 32 | -| Parameter 3 of TryLoad | parameter | 32 | -| Parameter 3 of TryParse | parameter | 32 | -| Parameter 3 of TryParseByFormat | parameter | 32 | -| Parameter 3 of TryParseComponent | parameter | 32 | -| Parameter 3 of TryParseDateTimeG | parameter | 32 | -| Parameter 3 of TryParseDateTimeOffsetO | parameter | 32 | -| Parameter 3 of TryParseDateTimeOffsetR | parameter | 32 | -| Parameter 3 of TryParseDecimal | parameter | 32 | -| Parameter 3 of TryParseDouble | parameter | 32 | -| Parameter 3 of TryParseExact | parameter | 32 | -| Parameter 3 of TryParseHalf | parameter | 32 | -| Parameter 3 of TryParseInt32 | parameter | 32 | -| Parameter 3 of TryParseInt32IntegerStyle | parameter | 32 | -| Parameter 3 of TryParseInt32Number | parameter | 32 | -| Parameter 3 of TryParseInt64 | parameter | 32 | -| Parameter 3 of TryParseInt64IntegerStyle | parameter | 32 | -| Parameter 3 of TryParseInt64Number | parameter | 32 | -| Parameter 3 of TryParseNumber | parameter | 32 | -| Parameter 3 of TryParseQuoteString | parameter | 32 | -| Parameter 3 of TryParseSingle | parameter | 32 | -| Parameter 3 of TryParseTimeSpan | parameter | 32 | -| Parameter 3 of TryParseUInt32 | parameter | 32 | -| Parameter 3 of TryParseUInt32IntegerStyle | parameter | 32 | -| Parameter 3 of TryParseUInt32Number | parameter | 32 | -| Parameter 3 of TryParseUInt64 | parameter | 32 | -| Parameter 3 of TryParseUInt64IntegerStyle | parameter | 32 | -| Parameter 3 of TryParseUInt64Number | parameter | 32 | -| Parameter 3 of TryRunCounted | parameter | 32 | -| Parameter 3 of TrySplitTimeSpan | parameter | 32 | -| Parameter 3 of TryUInt32ToDecStr | parameter | 32 | -| Parameter 3 of TryUInt64ToDecStr | parameter | 32 | -| Parameter 3 of UpdateDescriptor | parameter | 32 | -| Parameter 3 of ValidateTimeZoneInfo | parameter | 32 | -| Parameter 3 of Write | parameter | 32 | -| Parameter 3 of WriteFile | parameter | 32 | -| Parameter 3 of WriteToBuffer | parameter | 32 | -| Parameter 3 of _Enum | parameter | 32 | -| Parameter 3 of _GetClassLayout | parameter | 32 | -| Parameter 3 of _GetCustomAttributeProps | parameter | 32 | -| Parameter 3 of _GetDefaultValue | parameter | 32 | -| Parameter 3 of _GetEventProps | parameter | 32 | -| Parameter 3 of _GetFieldOffset | parameter | 32 | -| Parameter 3 of _GetMarshalAs | parameter | 32 | -| Parameter 3 of _GetParamDefProps | parameter | 32 | -| Parameter 3 of _GetPropertyOrFieldData | parameter | 32 | -| Parameter 3 of _GetPropertyProps | parameter | 32 | -| Parameter 3 of _GetUserString | parameter | 32 | -| Parameter 3 of _ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 4 of .ctor | parameter | 32 | -| Parameter 4 of g__TryFormatInt64Slow\|43_0 | parameter | 32 | -| Parameter 4 of g__TryFormatUInt32Slow\|41_0 | parameter | 32 | -| Parameter 4 of g__TryFormatUInt64Slow\|45_0 | parameter | 32 | -| Parameter 4 of g__AppendToStdInReaderUntil\|83_1 | parameter | 32 | -| Parameter 4 of g__BufferUntil\|83_0 | parameter | 32 | -| Parameter 4 of g__ReadRowOrCol\|83_2 | parameter | 32 | -| Parameter 4 of AssignAssociates | parameter | 32 | -| Parameter 4 of Bind | parameter | 32 | -| Parameter 4 of BindToObject | parameter | 32 | -| Parameter 4 of BindToStorage | parameter | 32 | -| Parameter 4 of BindType | parameter | 32 | -| Parameter 4 of CallStringMethod | parameter | 32 | -| Parameter 4 of Convert | parameter | 32 | -| Parameter 4 of ConvertHijriToGregorian | parameter | 32 | -| Parameter 4 of CreateEventCore | parameter | 32 | -| Parameter 4 of CreateInstance | parameter | 32 | -| Parameter 4 of CreateSemaphoreCore | parameter | 32 | -| Parameter 4 of Deconstruct | parameter | 32 | -| Parameter 4 of DoStrictParse | parameter | 32 | -| Parameter 4 of EnumMonthNames | parameter | 32 | -| Parameter 4 of EscapeString | parameter | 32 | -| Parameter 4 of EvaluateInternal | parameter | 32 | -| Parameter 4 of EventRegister | parameter | 32 | -| Parameter 4 of FilterHelper | parameter | 32 | -| Parameter 4 of GetByteCountFast | parameter | 32 | -| Parameter 4 of GetCharCountFast | parameter | 32 | -| Parameter 4 of GetDataFromController | parameter | 32 | -| Parameter 4 of GetDefaultValue | parameter | 32 | -| Parameter 4 of GetDocumentation | parameter | 32 | -| Parameter 4 of GetDocumentation2 | parameter | 32 | -| Parameter 4 of GetMarshalAs | parameter | 32 | -| Parameter 4 of GetNames | parameter | 32 | -| Parameter 4 of GetPInvokeMap | parameter | 32 | -| Parameter 4 of GetParamCustData | parameter | 32 | -| Parameter 4 of GetPropertyOrFieldData | parameter | 32 | -| Parameter 4 of GetPropertyProps | parameter | 32 | -| Parameter 4 of GetTime | parameter | 32 | -| Parameter 4 of GetTimePrecise | parameter | 32 | -| Parameter 4 of GetValue | parameter | 32 | -| Parameter 4 of GetVersion | parameter | 32 | -| Parameter 4 of GregorianToLunar | parameter | 32 | -| Parameter 4 of IndexOf | parameter | 32 | -| Parameter 4 of InitHash | parameter | 32 | -| Parameter 4 of Invoke | parameter | 32 | -| Parameter 4 of IsPrefix | parameter | 32 | -| Parameter 4 of IsSuffix | parameter | 32 | -| Parameter 4 of LastIndexOf | parameter | 32 | -| Parameter 4 of Lex | parameter | 32 | -| Parameter 4 of LunarToGregorian | parameter | 32 | -| Parameter 4 of MakeRoom | parameter | 32 | -| Parameter 4 of MapBufferToConsoleKey | parameter | 32 | -| Parameter 4 of OnStart | parameter | 32 | -| Parameter 4 of OnStop | parameter | 32 | -| Parameter 4 of ParseByFormat | parameter | 32 | -| Parameter 4 of ParseDisplayName | parameter | 32 | -| Parameter 4 of ParseExact | parameter | 32 | -| Parameter 4 of ParseExactDigits | parameter | 32 | -| Parameter 4 of ParseExactMultiple | parameter | 32 | -| Parameter 4 of PopulateEvents | parameter | 32 | -| Parameter 4 of ReadFromBuffer | parameter | 32 | -| Parameter 4 of Reduce | parameter | 32 | -| Parameter 4 of Remove | parameter | 32 | -| Parameter 4 of ResolveToken | parameter | 32 | -| Parameter 4 of SnapForObservation | parameter | 32 | -| Parameter 4 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 4 of TZif_ParseRaw | parameter | 32 | -| Parameter 4 of TimeToLunar | parameter | 32 | -| Parameter 4 of Tokenize | parameter | 32 | -| Parameter 4 of TranscodeToUtf8 | parameter | 32 | -| Parameter 4 of TranscodeToUtf16 | parameter | 32 | -| Parameter 4 of TryCreateDateTimeOffset | parameter | 32 | -| Parameter 4 of TryDigitGenCounted | parameter | 32 | -| Parameter 4 of TryDigitGenShortest | parameter | 32 | -| Parameter 4 of TryDrainLeftoverDataForGetBytes | parameter | 32 | -| Parameter 4 of TryFormatDecimal | parameter | 32 | -| Parameter 4 of TryFormatDouble | parameter | 32 | -| Parameter 4 of TryFormatHalf | parameter | 32 | -| Parameter 4 of TryFormatInt64 | parameter | 32 | -| Parameter 4 of TryFormatSingle | parameter | 32 | -| Parameter 4 of TryFormatStandard | parameter | 32 | -| Parameter 4 of TryFormatUInt32 | parameter | 32 | -| Parameter 4 of TryFormatUInt64 | parameter | 32 | -| Parameter 4 of TryFormatUInt64D | parameter | 32 | -| Parameter 4 of TryFormatUInt64N | parameter | 32 | -| Parameter 4 of TryFormatUInt64X | parameter | 32 | -| Parameter 4 of TryGetSpecialConsoleKey | parameter | 32 | -| Parameter 4 of TryInt32ToHexStr | parameter | 32 | -| Parameter 4 of TryInt64ToHexStr | parameter | 32 | -| Parameter 4 of TryInternalFallbackGetBytes | parameter | 32 | -| Parameter 4 of TryInternalFallbackGetChars | parameter | 32 | -| Parameter 4 of TryJoin | parameter | 32 | -| Parameter 4 of TryNegativeInt32ToDecStr | parameter | 32 | -| Parameter 4 of TryNegativeInt64ToDecStr | parameter | 32 | -| Parameter 4 of TryParse | parameter | 32 | -| Parameter 4 of TryParseAsSpecialFloatingPoint | parameter | 32 | -| Parameter 4 of TryParseExact | parameter | 32 | -| Parameter 4 of TryParseExactMultiple | parameter | 32 | -| Parameter 4 of TryParseExactMultipleTimeSpan | parameter | 32 | -| Parameter 4 of TryParseExactTimeSpan | parameter | 32 | -| Parameter 4 of TryParseNumber | parameter | 32 | -| Parameter 4 of TryRunCounted | parameter | 32 | -| Parameter 4 of TryRunShortest | parameter | 32 | -| Parameter 4 of UpdateDescriptor | parameter | 32 | -| Parameter 4 of Write | parameter | 32 | -| Parameter 4 of _GetDefaultValue | parameter | 32 | -| Parameter 4 of _GetMarshalAs | parameter | 32 | -| Parameter 4 of _GetPropertyOrFieldData | parameter | 32 | -| Parameter 4 of _GetPropertyProps | parameter | 32 | -| Parameter 4 of _ParseAttributeUsageAttribute | parameter | 32 | -| Parameter 5 of g__TryFormatInt32Slow\|39_0 | parameter | 32 | -| Parameter 5 of AssignAssociates | parameter | 32 | -| Parameter 5 of Bind | parameter | 32 | -| Parameter 5 of ConstructType | parameter | 32 | -| Parameter 5 of Convert | parameter | 32 | -| Parameter 5 of ConvertHijriToGregorian | parameter | 32 | -| Parameter 5 of CreateCaObject | parameter | 32 | -| Parameter 5 of CreateInstance | parameter | 32 | -| Parameter 5 of CreateInstanceLic | parameter | 32 | -| Parameter 5 of Deconstruct | parameter | 32 | -| Parameter 5 of EnsureDestinationSize | parameter | 32 | -| Parameter 5 of EvaluateInternal | parameter | 32 | -| Parameter 5 of FilterHelper | parameter | 32 | -| Parameter 5 of FindName | parameter | 32 | -| Parameter 5 of GetBytesFast | parameter | 32 | -| Parameter 5 of GetCharsFast | parameter | 32 | -| Parameter 5 of GetDataFromController | parameter | 32 | -| Parameter 5 of GetDocumentation | parameter | 32 | -| Parameter 5 of GetIsDaylightSavingsFromUtc | parameter | 32 | -| Parameter 5 of GetMarshalAs | parameter | 32 | -| Parameter 5 of GetPropertyOrFieldData | parameter | 32 | -| Parameter 5 of GetType | parameter | 32 | -| Parameter 5 of GregorianToLunar | parameter | 32 | -| Parameter 5 of Invoke | parameter | 32 | -| Parameter 5 of Lex | parameter | 32 | -| Parameter 5 of LunarToGregorian | parameter | 32 | -| Parameter 5 of MapBufferToConsoleKey | parameter | 32 | -| Parameter 5 of OnStart | parameter | 32 | -| Parameter 5 of ParseDisplayName | parameter | 32 | -| Parameter 5 of PopulateProperties | parameter | 32 | -| Parameter 5 of PopulateRtFields | parameter | 32 | -| Parameter 5 of ResolveType | parameter | 32 | -| Parameter 5 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 5 of TZif_ParseRaw | parameter | 32 | -| Parameter 5 of TranscodeToUtf8 | parameter | 32 | -| Parameter 5 of TranscodeToUtf16 | parameter | 32 | -| Parameter 5 of TryDigitGenShortest | parameter | 32 | -| Parameter 5 of TryFormatInt32 | parameter | 32 | -| Parameter 5 of TryParseAsSpecialFloatingPoint | parameter | 32 | -| Parameter 5 of TryParseByName | parameter | 32 | -| Parameter 5 of TryParseExact | parameter | 32 | -| Parameter 5 of TryParseExactMultiple | parameter | 32 | -| Parameter 5 of TryParseInt64Enum | parameter | 32 | -| Parameter 5 of TryParseRareEnum | parameter | 32 | -| Parameter 5 of TryParseUInt64Enum | parameter | 32 | -| Parameter 5 of TryRoundWeedCounted | parameter | 32 | -| Parameter 5 of TryRunShortest | parameter | 32 | -| Parameter 5 of Write | parameter | 32 | -| Parameter 5 of _GetMarshalAs | parameter | 32 | -| Parameter 5 of _GetPropertyOrFieldData | parameter | 32 | -| Parameter 6 of AssignAssociates | parameter | 32 | -| Parameter 6 of Bind | parameter | 32 | -| Parameter 6 of Convert | parameter | 32 | -| Parameter 6 of Deconstruct | parameter | 32 | -| Parameter 6 of FilterCustomAttributeRecord | parameter | 32 | -| Parameter 6 of GetMarshalAs | parameter | 32 | -| Parameter 6 of GetPropertyOrFieldData | parameter | 32 | -| Parameter 6 of GregorianToLunar | parameter | 32 | -| Parameter 6 of Invoke | parameter | 32 | -| Parameter 6 of LunarToGregorian | parameter | 32 | -| Parameter 6 of SetValue | parameter | 32 | -| Parameter 6 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 6 of TZif_ParseRaw | parameter | 32 | -| Parameter 6 of TryCreateTimeSpan | parameter | 32 | -| Parameter 6 of TryTimeToTicks | parameter | 32 | -| Parameter 6 of _GetMarshalAs | parameter | 32 | -| Parameter 6 of _GetPropertyOrFieldData | parameter | 32 | -| Parameter 7 of AssignAssociates | parameter | 32 | -| Parameter 7 of BindToMethod | parameter | 32 | -| Parameter 7 of Convert | parameter | 32 | -| Parameter 7 of Deconstruct | parameter | 32 | -| Parameter 7 of Dragon4 | parameter | 32 | -| Parameter 7 of FilterCustomAttributeRecord | parameter | 32 | -| Parameter 7 of GetMarshalAs | parameter | 32 | -| Parameter 7 of Invoke | parameter | 32 | -| Parameter 7 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 7 of TZif_ParseRaw | parameter | 32 | -| Parameter 7 of TryCreate | parameter | 32 | -| Parameter 7 of TryCreateDateTimeOffsetInterpretingDataAsLocalTime | parameter | 32 | -| Parameter 7 of TryParseUInt32Enum | parameter | 32 | -| Parameter 7 of _GetMarshalAs | parameter | 32 | -| Parameter 8 of AssignAssociates | parameter | 32 | -| Parameter 8 of Convert | parameter | 32 | -| Parameter 8 of CreateInstanceInternal | parameter | 32 | -| Parameter 8 of Deconstruct | parameter | 32 | -| Parameter 8 of FilterCustomAttributeRecord | parameter | 32 | -| Parameter 8 of GetMarshalAs | parameter | 32 | -| Parameter 8 of TZif_ParsePosixFormat | parameter | 32 | -| Parameter 8 of TZif_ParseRaw | parameter | 32 | -| Parameter 8 of TryCreateDateTime | parameter | 32 | -| Parameter 8 of TryParseInt32Enum | parameter | 32 | -| Parameter 8 of _GetMarshalAs | parameter | 32 | -| Parameter 9 of AssignAssociates | parameter | 32 | -| Parameter 9 of Convert | parameter | 32 | -| Parameter 9 of Deconstruct | parameter | 32 | -| Parameter 9 of FilterCustomAttributeRecord | parameter | 32 | -| Parameter 9 of GetMarshalAs | parameter | 32 | -| Parameter 9 of Invoke | parameter | 32 | -| Parameter 9 of TryToDateTime | parameter | 32 | -| Parameter 9 of _GetMarshalAs | parameter | 32 | -| Parameter 10 of AssignAssociates | parameter | 32 | -| Parameter 10 of Convert | parameter | 32 | -| Parameter 10 of Deconstruct | parameter | 32 | -| Parameter 10 of Invoke | parameter | 32 | -| Parameter 10 of TryCreateDateTimeOffset | parameter | 32 | -| Parameter 10 of _GetMarshalAs | parameter | 32 | -| Parameter 11 of AssignAssociates | parameter | 32 | -| Parameter 11 of Deconstruct | parameter | 32 | -| Parameter 11 of Invoke | parameter | 32 | -| Parameter 12 of Deconstruct | parameter | 32 | -| Parameter 13 of Deconstruct | parameter | 32 | -| Parameter 14 of Deconstruct | parameter | 32 | -| Parameter 15 of Deconstruct | parameter | 32 | -| Parameter 16 of Deconstruct | parameter | 32 | -| Parameter 17 of Deconstruct | parameter | 32 | -| Parameter 18 of Deconstruct | parameter | 32 | -| Parameter 19 of Deconstruct | parameter | 32 | -| Parameter 20 of Deconstruct | parameter | 32 | -| Parameter 21 of Deconstruct | parameter | 32 | -| TableData | method | 32 | -| ThrowArrayMismatchException | method | 32 | -| Unbox | method | 32 | -| Unbox_Helper | method | 32 | -| get_Current | method | 32 | -| get_EventHandle | method | 32 | -| get_Item | method | 32 | -| get_OffsetHigh | method | 32 | -| get_OffsetLow | method | 32 | -| get_Value | method | 32 | -| property Current | property | 32 | -| property EventHandle | property | 32 | -| property Item | property | 32 | -| property OffsetHigh | property | 32 | -| property OffsetLow | property | 32 | -| property Value | property | 32 | +| Internal.Runtime.CompilerServices.Unsafe.Add | method | 32 | +| Internal.Runtime.CompilerServices.Unsafe.AddByteOffset | method | 32 | +| Internal.Runtime.CompilerServices.Unsafe.As | method | 32 | +| Internal.Runtime.CompilerServices.Unsafe.AsRef | method | 32 | +| Internal.Runtime.CompilerServices.Unsafe.NullRef | method | 32 | +| Local variable 0 of method System.Array.Clear | local | 32 | +| Local variable 0 of method System.Array.GetFlattenedIndex | local | 32 | +| Local variable 0 of method System.Array.Reverse | local | 32 | +| Local variable 0 of method System.Buffer.Memmove | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.Contains | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.Enumerator.MoveNext | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.FindValue | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.KeyCollection.Enumerator.MoveNext | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.Remove | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.TryGetValue | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.ValueCollection.Enumerator.MoveNext | local | 32 | +| Local variable 0 of method System.Collections.Generic.Dictionary.get_Item | local | 32 | +| Local variable 0 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | +| Local variable 0 of method System.Collections.Generic.GenericArraySortHelper.SwapIfGreaterWithValues | local | 32 | +| Local variable 0 of method System.Collections.Generic.HashSet.Enumerator.MoveNext | local | 32 | +| Local variable 0 of method System.Convert.TryDecodeFromUtf16 | local | 32 | +| Local variable 0 of method System.Diagnostics.Tracing.EventSource.AddEventDescriptor | local | 32 | +| Local variable 0 of method System.Diagnostics.Tracing.EventSource.WriteEventVarargs | local | 32 | +| Local variable 0 of method System.Diagnostics.Tracing.EventSource.WriteEventWithRelatedActivityIdCore | local | 32 | +| Local variable 0 of method System.Diagnostics.Tracing.EventSource.WriteToAllListeners | local | 32 | +| Local variable 0 of method System.Diagnostics.Tracing.EventWrittenEventArgs.get_OSThreadId | local | 32 | +| Local variable 0 of method System.Enum.CompareTo | local | 32 | +| Local variable 0 of method System.Enum.GetHashCode | local | 32 | +| Local variable 0 of method System.Enum.GetValue | local | 32 | +| Local variable 0 of method System.Enum.ToUInt64 | local | 32 | +| Local variable 0 of method System.Enum.ValueToHexString | local | 32 | +| Local variable 0 of method System.Enum.ValueToString | local | 32 | +| Local variable 0 of method System.Guid.EqualsCore | local | 32 | +| Local variable 0 of method System.Guid.GetHashCode | local | 32 | +| Local variable 0 of method System.HashCode.AddBytes | local | 32 | +| Local variable 0 of method System.IO.Path.<>c.b__39_0 | local | 32 | +| Local variable 0 of method System.IO.Path.<>c.b__41_0 | local | 32 | +| Local variable 0 of method System.MemoryExtensions.Reverse | local | 32 | +| Local variable 0 of method System.Number.BigInteger.Add | local | 32 | +| Local variable 0 of method System.Number.BigInteger.Multiply | local | 32 | +| Local variable 0 of method System.ReadOnlySpan.GetPinnableReference | local | 32 | +| Local variable 0 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.RemoveIndex | local | 32 | +| Local variable 0 of method System.Runtime.Intrinsics.Vector64.GetElement | local | 32 | +| Local variable 0 of method System.Runtime.Intrinsics.Vector128.GetElement | local | 32 | +| Local variable 0 of method System.Runtime.Intrinsics.Vector128.GetUpper | local | 32 | +| Local variable 0 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|68_0 | local | 32 | +| Local variable 0 of method System.Runtime.Intrinsics.Vector256.GetElement | local | 32 | +| Local variable 0 of method System.Span.GetPinnableReference | local | 32 | +| Local variable 0 of method System.String.g__ReadVector\|201_0 | local | 32 | +| Local variable 0 of method System.Threading.CancellationTokenSource.Registrations.EnterLock | local | 32 | +| Local variable 0 of method System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction | local | 32 | +| Local variable 0 of method System.Threading.TimerQueue.LinkTimer | local | 32 | +| Local variable 1 of method System.Array.Fill | local | 32 | +| Local variable 1 of method System.Array.GetUpperBound | local | 32 | +| Local variable 1 of method System.Array.Reverse | local | 32 | +| Local variable 1 of method System.Buffer.Memmove | local | 32 | +| Local variable 1 of method System.Collections.Generic.Dictionary.FindValue | local | 32 | +| Local variable 1 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | +| Local variable 1 of method System.Collections.Generic.RandomizedStringEqualityComparer..ctor | local | 32 | +| Local variable 1 of method System.ConsolePal.Read | local | 32 | +| Local variable 1 of method System.ConsolePal.Write | local | 32 | +| Local variable 1 of method System.Convert.FromBase64CharArray | local | 32 | +| Local variable 1 of method System.Convert.FromBase64String | local | 32 | +| Local variable 1 of method System.Convert.TryDecodeFromUtf16 | local | 32 | +| Local variable 1 of method System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.CreateActivityPathGuid | local | 32 | +| Local variable 1 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | +| Local variable 1 of method System.Diagnostics.Tracing.EventSource.WriteImpl | local | 32 | +| Local variable 1 of method System.Diagnostics.Tracing.EventSource.WriteMultiMerge | local | 32 | +| Local variable 1 of method System.Diagnostics.Tracing.FrameworkEventSource.WriteEvent | local | 32 | +| Local variable 1 of method System.Enum.CompareTo | local | 32 | +| Local variable 1 of method System.Globalization.CalendarData.<>c.b__33_0 | local | 32 | +| Local variable 1 of method System.Globalization.CalendarData.EnumCalendarInfoCallback | local | 32 | +| Local variable 1 of method System.Globalization.CharUnicodeInfo.GetCategoryCasingTableOffsetNoBoundsChecks | local | 32 | +| Local variable 1 of method System.Globalization.CharUnicodeInfo.GetNumericGraphemeTableOffsetNoBoundsChecks | local | 32 | +| Local variable 1 of method System.Globalization.CharUnicodeInfo.GetNumericValueNoBoundsCheck | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IcuCompareString | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IcuEndsWith | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IcuGetSortKeyLength | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IcuIndexOfCore | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IcuStartsWith | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IndexOfOrdinalHelper | local | 32 | +| Local variable 1 of method System.Globalization.CompareInfo.IndexOfOrdinalIgnoreCaseHelper | local | 32 | +| Local variable 1 of method System.Globalization.IdnMapping.GetAscii | local | 32 | +| Local variable 1 of method System.Globalization.IdnMapping.GetUnicode | local | 32 | +| Local variable 1 of method System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | local | 32 | +| Local variable 1 of method System.Globalization.InvariantModeCasing.IndexOfIgnoreCase | local | 32 | +| Local variable 1 of method System.Globalization.InvariantModeCasing.LastIndexOfIgnoreCase | local | 32 | +| Local variable 1 of method System.Globalization.OrdinalCasing.CompareStringIgnoreCase | local | 32 | +| Local variable 1 of method System.Globalization.OrdinalCasing.IndexOf | local | 32 | +| Local variable 1 of method System.Globalization.OrdinalCasing.LastIndexOf | local | 32 | +| Local variable 1 of method System.Globalization.TextInfo.ToLowerAsciiInvariant | local | 32 | +| Local variable 1 of method System.Guid.EqualsCore | local | 32 | +| Local variable 1 of method System.HashCode.AddBytes | local | 32 | +| Local variable 1 of method System.HexConverter.ToString | local | 32 | +| Local variable 1 of method System.IO.Enumeration.FileSystemEntry.get_FileName | local | 32 | +| Local variable 1 of method System.IO.RandomAccess.ReadAtOffset | local | 32 | +| Local variable 1 of method System.IO.RandomAccess.WriteAtOffset | local | 32 | +| Local variable 1 of method System.IO.Strategies.Net5CompatFileStreamStrategy.WriteNative | local | 32 | +| Local variable 1 of method System.MemoryExtensions.Reverse | local | 32 | +| Local variable 1 of method System.Number.BigInteger.Add | local | 32 | +| Local variable 1 of method System.Number.BigInteger.Pow10 | local | 32 | +| Local variable 1 of method System.Number.MatchChars | local | 32 | +| Local variable 1 of method System.Number.TryStringToNumber | local | 32 | +| Local variable 1 of method System.Reflection.Emit.ScopeTree.AddUsingNamespaceToCurrentScope | local | 32 | +| Local variable 1 of method System.Reflection.MetadataEnumResult.get_Item | local | 32 | +| Local variable 1 of method System.Runtime.InteropServices.Marshal.QueryInterface | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector64.WithElement | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|40_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|41_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|42_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|43_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|44_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|45_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|46_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|47_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|48_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|49_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|75_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector128.WithElement | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|34_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|35_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|36_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|37_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|38_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|39_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|40_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|41_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|42_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|43_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|69_0 | local | 32 | +| Local variable 1 of method System.Runtime.Intrinsics.Vector256.WithElement | local | 32 | +| Local variable 1 of method System.SpanHelpers.IndexOf | local | 32 | +| Local variable 1 of method System.SpanHelpers.LastIndexOf | local | 32 | +| Local variable 1 of method System.String.g__ReadVector\|201_0 | local | 32 | +| Local variable 1 of method System.String.GetBytesFromEncoding | local | 32 | +| Local variable 1 of method System.String.GetNonRandomizedHashCode | local | 32 | +| Local variable 1 of method System.String.IsAscii | local | 32 | +| Local variable 1 of method System.String.Trim | local | 32 | +| Local variable 1 of method System.String.TrimEnd | local | 32 | +| Local variable 1 of method System.String.TrimStart | local | 32 | +| Local variable 1 of method System.Text.ASCIIEncoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.ASCIIEncoding.GetBytes | local | 32 | +| Local variable 1 of method System.Text.ASCIIEncoding.GetCharCount | local | 32 | +| Local variable 1 of method System.Text.ASCIIEncoding.GetChars | local | 32 | +| Local variable 1 of method System.Text.Decoder.Convert | local | 32 | +| Local variable 1 of method System.Text.Decoder.GetCharCount | local | 32 | +| Local variable 1 of method System.Text.Decoder.GetChars | local | 32 | +| Local variable 1 of method System.Text.DecoderNLS.Convert | local | 32 | +| Local variable 1 of method System.Text.DecoderNLS.GetCharCount | local | 32 | +| Local variable 1 of method System.Text.Encoder.Convert | local | 32 | +| Local variable 1 of method System.Text.Encoder.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.Encoder.GetBytes | local | 32 | +| Local variable 1 of method System.Text.EncoderNLS.Convert | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetByteCountWithFallback | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetBytes | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetBytesWithFallback | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetCharCount | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetCharCountWithFallback | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetChars | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetCharsWithFallback | local | 32 | +| Local variable 1 of method System.Text.Encoding.GetString | local | 32 | +| Local variable 1 of method System.Text.Latin1Encoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.Latin1Encoding.GetBytes | local | 32 | +| Local variable 1 of method System.Text.Latin1Encoding.GetChars | local | 32 | +| Local variable 1 of method System.Text.StringBuilder.Append | local | 32 | +| Local variable 1 of method System.Text.StringBuilder.AppendHelper | local | 32 | +| Local variable 1 of method System.Text.StringBuilder.AppendJoin | local | 32 | +| Local variable 1 of method System.Text.StringBuilder.Insert | local | 32 | +| Local variable 1 of method System.Text.StringBuilder.ReplaceAllInChunk | local | 32 | +| Local variable 1 of method System.Text.UTF7Encoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.UTF8Encoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.UTF8Encoding.GetBytes | local | 32 | +| Local variable 1 of method System.Text.UTF8Encoding.GetCharCount | local | 32 | +| Local variable 1 of method System.Text.UTF8Encoding.GetChars | local | 32 | +| Local variable 1 of method System.Text.UTF32Encoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Text.Unicode.Utf8.FromUtf16 | local | 32 | +| Local variable 1 of method System.Text.Unicode.Utf8.ToUtf16 | local | 32 | +| Local variable 1 of method System.Text.UnicodeEncoding.GetByteCount | local | 32 | +| Local variable 1 of method System.Threading.PortableThreadPool.HillClimbing.LogTransition | local | 32 | +| Local variable 1 of method System.Threading.Tasks.TplEventSource.TraceOperationBegin | local | 32 | +| Local variable 1 of method System.Threading.WaitHandle.WaitMultipleIgnoringSyncContext | local | 32 | +| Local variable 1 of method System.TimeZoneInfo.<>c.b__183_0 | local | 32 | +| Local variable 1 of method System.TimeZoneInfo.<>c.b__183_1 | local | 32 | +| Local variable 2 of method System.Array.Clear | local | 32 | +| Local variable 2 of method System.Array.Copy | local | 32 | +| Local variable 2 of method System.Collections.Generic.Dictionary.Remove | local | 32 | +| Local variable 2 of method System.Collections.Generic.GenericArraySortHelper.IntroSort | local | 32 | +| Local variable 2 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | +| Local variable 2 of method System.Collections.Generic.HashSet.CopyTo | local | 32 | +| Local variable 2 of method System.Collections.Generic.HashSet.IntersectWithHashSetWithSameComparer | local | 32 | +| Local variable 2 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForNamedTypeV2 | local | 32 | +| Local variable 2 of method System.Diagnostics.Tracing.EventSource.Write | local | 32 | +| Local variable 2 of method System.Globalization.CompareInfo.EndsWithOrdinalHelper | local | 32 | +| Local variable 2 of method System.Globalization.CompareInfo.EndsWithOrdinalIgnoreCaseHelper | local | 32 | +| Local variable 2 of method System.Globalization.CompareInfo.IcuCreateSortKey | local | 32 | +| Local variable 2 of method System.Globalization.CompareInfo.IcuGetSortKey | local | 32 | +| Local variable 2 of method System.Globalization.CompareInfo.StartsWithOrdinalHelper | local | 32 | +| Local variable 2 of method System.Globalization.CompareInfo.StartsWithOrdinalIgnoreCaseHelper | local | 32 | +| Local variable 2 of method System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | local | 32 | +| Local variable 2 of method System.Globalization.Normalization.IcuIsNormalized | local | 32 | +| Local variable 2 of method System.Globalization.Ordinal.CompareStringIgnoreCase | local | 32 | +| Local variable 2 of method System.Globalization.OrdinalCasing.CompareStringIgnoreCase | local | 32 | +| Local variable 2 of method System.Globalization.TextInfo.ChangeCaseCommon | local | 32 | +| Local variable 2 of method System.IO.Path.TryJoin | local | 32 | +| Local variable 2 of method System.IO.PathInternal.EqualStartingCharacterCount | local | 32 | +| Local variable 2 of method System.IO.PinnedBufferMemoryStream..ctor | local | 32 | +| Local variable 2 of method System.IO.Strategies.Net5CompatFileStreamStrategy.ReadNative | local | 32 | +| Local variable 2 of method System.Number.BigInteger.Multiply | local | 32 | +| Local variable 2 of method System.Number.TryInt32ToHexStr | local | 32 | +| Local variable 2 of method System.Number.TryInt64ToHexStr | local | 32 | +| Local variable 2 of method System.Number.TryNegativeInt32ToDecStr | local | 32 | +| Local variable 2 of method System.Number.TryUInt32ToDecStr | local | 32 | +| Local variable 2 of method System.Number.TryUInt64ToDecStr | local | 32 | +| Local variable 2 of method System.Numerics.Matrix4x4.Decompose | local | 32 | +| Local variable 2 of method System.Object.MemberwiseClone | local | 32 | +| Local variable 2 of method System.Runtime.InteropServices.Marshal.StringToAnsiString | local | 32 | +| Local variable 2 of method System.String.CompareOrdinalHelper | local | 32 | +| Local variable 2 of method System.String.Ctor | local | 32 | +| Local variable 2 of method System.StubHelpers.AnsiCharMarshaler.DoAnsiConversion | local | 32 | +| Local variable 2 of method System.Text.DecoderNLS.GetChars | local | 32 | +| Local variable 2 of method System.Text.EncoderNLS.GetByteCount | local | 32 | +| Local variable 2 of method System.Text.EncoderNLS.GetBytes | local | 32 | +| Local variable 2 of method System.Text.StringBuilder.Insert | local | 32 | +| Local variable 2 of method System.Text.UTF7Encoding.GetBytes | local | 32 | +| Local variable 2 of method System.Text.UTF32Encoding.GetBytes | local | 32 | +| Local variable 2 of method System.Text.UnicodeEncoding.GetBytes | local | 32 | +| Local variable 3 of method System.Array.Copy | local | 32 | +| Local variable 3 of method System.Array.CreateInstance | local | 32 | +| Local variable 3 of method System.Collections.Generic.GenericArraySortHelper.IntroSort | local | 32 | +| Local variable 3 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | +| Local variable 3 of method System.Collections.Generic.HashSet.RemoveWhere | local | 32 | +| Local variable 3 of method System.Collections.Generic.HashSet.Resize | local | 32 | +| Local variable 3 of method System.Convert.ToBase64String | local | 32 | +| Local variable 3 of method System.Convert.TryToBase64Chars | local | 32 | +| Local variable 3 of method System.Diagnostics.Tracing.EventPipeInternal.Enable | local | 32 | +| Local variable 3 of method System.Diagnostics.Tracing.EventSource.Write | local | 32 | +| Local variable 3 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | +| Local variable 3 of method System.Globalization.CompareInfo.IcuCompareString | local | 32 | +| Local variable 3 of method System.Globalization.CompareInfo.IcuEndsWith | local | 32 | +| Local variable 3 of method System.Globalization.CompareInfo.IcuIndexOfCore | local | 32 | +| Local variable 3 of method System.Globalization.CompareInfo.IcuStartsWith | local | 32 | +| Local variable 3 of method System.Globalization.CompareInfo.IndexOfOrdinalHelper | local | 32 | +| Local variable 3 of method System.Globalization.CompareInfo.IndexOfOrdinalIgnoreCaseHelper | local | 32 | +| Local variable 3 of method System.Globalization.InvariantModeCasing.IndexOfIgnoreCase | local | 32 | +| Local variable 3 of method System.Globalization.InvariantModeCasing.LastIndexOfIgnoreCase | local | 32 | +| Local variable 3 of method System.Globalization.Ordinal.CompareStringIgnoreCase | local | 32 | +| Local variable 3 of method System.Globalization.OrdinalCasing.IndexOf | local | 32 | +| Local variable 3 of method System.Globalization.OrdinalCasing.LastIndexOf | local | 32 | +| Local variable 3 of method System.Memory.Pin | local | 32 | +| Local variable 3 of method System.Number.BigInteger.Pow10 | local | 32 | +| Local variable 3 of method System.Number.FindSection | local | 32 | +| Local variable 3 of method System.Number.Int32ToHexStr | local | 32 | +| Local variable 3 of method System.Number.Int64ToHexStr | local | 32 | +| Local variable 3 of method System.Number.NegativeInt32ToDecStr | local | 32 | +| Local variable 3 of method System.Number.TryNegativeInt64ToDecStr | local | 32 | +| Local variable 3 of method System.Number.UInt32ToDecStr | local | 32 | +| Local variable 3 of method System.Number.UInt64ToDecStr | local | 32 | +| Local variable 3 of method System.Object.MemberwiseClone | local | 32 | +| Local variable 3 of method System.ReadOnlyMemory.Pin | local | 32 | +| Local variable 3 of method System.Reflection.CustomAttribute.AddCustomAttributes | local | 32 | +| Local variable 3 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | +| Local variable 3 of method System.Runtime.InteropServices.Marshal.QueryInterface | local | 32 | +| Local variable 3 of method System.Runtime.InteropServices.SafeBuffer.ReadSpan | local | 32 | +| Local variable 3 of method System.Runtime.InteropServices.SafeBuffer.WriteSpan | local | 32 | +| Local variable 3 of method System.Runtime.Loader.AssemblyLoadContext.InternalLoad | local | 32 | +| Local variable 3 of method System.RuntimeType.RuntimeTypeCache.MemberInfoCache.Populate | local | 32 | +| Local variable 3 of method System.SpanHelpers.Fill | local | 32 | +| Local variable 3 of method System.String.CreateStringFromEncoding | local | 32 | +| Local variable 3 of method System.String.GetNonRandomizedHashCodeOrdinalIgnoreCase | local | 32 | +| Local variable 3 of method System.String.IndexOfCharArray | local | 32 | +| Local variable 3 of method System.String.LastIndexOfCharArray | local | 32 | +| Local variable 3 of method System.Text.ASCIIEncoding.GetBytes | local | 32 | +| Local variable 3 of method System.Text.ASCIIEncoding.GetChars | local | 32 | +| Local variable 3 of method System.Text.Decoder.Convert | local | 32 | +| Local variable 3 of method System.Text.Decoder.GetChars | local | 32 | +| Local variable 3 of method System.Text.DecoderNLS.Convert | local | 32 | +| Local variable 3 of method System.Text.Encoder.Convert | local | 32 | +| Local variable 3 of method System.Text.Encoder.GetBytes | local | 32 | +| Local variable 3 of method System.Text.EncoderNLS.Convert | local | 32 | +| Local variable 3 of method System.Text.Encoding.GetBytes | local | 32 | +| Local variable 3 of method System.Text.Encoding.GetBytesWithFallback | local | 32 | +| Local variable 3 of method System.Text.Encoding.GetChars | local | 32 | +| Local variable 3 of method System.Text.Encoding.GetCharsWithFallback | local | 32 | +| Local variable 3 of method System.Text.Latin1Encoding.<>c.b__29_0 | local | 32 | +| Local variable 3 of method System.Text.Latin1Encoding.<>c.b__30_0 | local | 32 | +| Local variable 3 of method System.Text.Latin1Encoding.GetBytes | local | 32 | +| Local variable 3 of method System.Text.Latin1Encoding.GetChars | local | 32 | +| Local variable 3 of method System.Text.StringBuilder.ToString | local | 32 | +| Local variable 3 of method System.Text.UTF8Encoding.GetBytes | local | 32 | +| Local variable 3 of method System.Text.UTF8Encoding.GetChars | local | 32 | +| Local variable 3 of method System.Text.Unicode.Utf8.FromUtf16 | local | 32 | +| Local variable 3 of method System.Text.Unicode.Utf8.ToUtf16 | local | 32 | +| Local variable 3 of method System.Threading.Thread.StartCore | local | 32 | +| Local variable 4 of method Interop.Kernel32.GetMessage | local | 32 | +| Local variable 4 of method System.Array.Copy | local | 32 | +| Local variable 4 of method System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | local | 32 | +| Local variable 4 of method System.Collections.Generic.Dictionary.CopyEntries | local | 32 | +| Local variable 4 of method System.Collections.Generic.Dictionary.Resize | local | 32 | +| Local variable 4 of method System.Collections.Generic.Dictionary.TryInsert | local | 32 | +| Local variable 4 of method System.Collections.Generic.GenericArraySortHelper.IntroSort | local | 32 | +| Local variable 4 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | +| Local variable 4 of method System.Collections.Generic.HashSet.ConstructFrom | local | 32 | +| Local variable 4 of method System.Collections.Generic.HashSet.Remove | local | 32 | +| Local variable 4 of method System.Diagnostics.Tracing.DataCollector.AddNullTerminatedString | local | 32 | +| Local variable 4 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | +| Local variable 4 of method System.Globalization.CompareInfo.EndsWithOrdinalHelper | local | 32 | +| Local variable 4 of method System.Globalization.CompareInfo.EndsWithOrdinalIgnoreCaseHelper | local | 32 | +| Local variable 4 of method System.Globalization.CompareInfo.IcuGetSortKey | local | 32 | +| Local variable 4 of method System.Globalization.CompareInfo.StartsWithOrdinalHelper | local | 32 | +| Local variable 4 of method System.Globalization.CompareInfo.StartsWithOrdinalIgnoreCaseHelper | local | 32 | +| Local variable 4 of method System.Globalization.IdnMapping.IcuGetUnicodeCore | local | 32 | +| Local variable 4 of method System.Globalization.TextInfo.ChangeCaseCommon | local | 32 | +| Local variable 4 of method System.IO.PathInternal.EqualStartingCharacterCount | local | 32 | +| Local variable 4 of method System.Number.BigInteger.AddDivisor | local | 32 | +| Local variable 4 of method System.Number.NegativeInt64ToDecStr | local | 32 | +| Local variable 4 of method System.Reflection.AssemblyName.EscapeString | local | 32 | +| Local variable 4 of method System.Runtime.Loader.AssemblyLoadContext.InternalLoad | local | 32 | +| Local variable 4 of method System.String.CompareOrdinalHelper | local | 32 | +| Local variable 4 of method System.String.MakeSeparatorListVectorized | local | 32 | +| Local variable 4 of method System.String.Replace | local | 32 | +| Local variable 4 of method System.TermInfo.ParameterizedStrings.FormatPrintF | local | 32 | +| Local variable 4 of method System.Text.DecoderNLS.GetChars | local | 32 | +| Local variable 4 of method System.Text.EncoderNLS.GetBytes | local | 32 | +| Local variable 4 of method System.Text.UTF7Encoding.GetBytes | local | 32 | +| Local variable 4 of method System.Text.UTF7Encoding.GetChars | local | 32 | +| Local variable 4 of method System.Text.UTF8Encoding.UTF8EncodingSealed.GetBytesForSmallInput | local | 32 | +| Local variable 4 of method System.Text.UTF32Encoding.GetBytes | local | 32 | +| Local variable 4 of method System.Text.UTF32Encoding.GetChars | local | 32 | +| Local variable 4 of method System.Text.UnicodeEncoding.GetBytes | local | 32 | +| Local variable 4 of method System.Text.UnicodeEncoding.GetChars | local | 32 | +| Local variable 5 of method Interop.Sys.GetCwd | local | 32 | +| Local variable 5 of method System.Array.Clear | local | 32 | +| Local variable 5 of method System.Array.Copy | local | 32 | +| Local variable 5 of method System.Array.CreateInstance | local | 32 | +| Local variable 5 of method System.Buffers.TlsOverPerCoreLockedStacksArrayPool.Return | local | 32 | +| Local variable 5 of method System.Collections.Generic.Dictionary.CopyEntries | local | 32 | +| Local variable 5 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | +| Local variable 5 of method System.Collections.Generic.HashSet.Resize | local | 32 | +| Local variable 5 of method System.Convert.ToBase64String | local | 32 | +| Local variable 5 of method System.Convert.TryToBase64Chars | local | 32 | +| Local variable 5 of method System.Diagnostics.Tracing.EventPipeInternal.Enable | local | 32 | +| Local variable 5 of method System.Diagnostics.Tracing.EventSource.WriteEvent | local | 32 | +| Local variable 5 of method System.Environment.get_UserName | local | 32 | +| Local variable 5 of method System.Globalization.TextInfo.ToLowerAsciiInvariant | local | 32 | +| Local variable 5 of method System.IO.Path.JoinInternal | local | 32 | +| Local variable 5 of method System.IO.PersistedFiles.GetHomeDirectory | local | 32 | +| Local variable 5 of method System.Number.BigInteger.Pow10 | local | 32 | +| Local variable 5 of method System.Number.BigInteger.SubtractDivisor | local | 32 | +| Local variable 5 of method System.Reflection.CustomAttribute.GetAttributeUsage | local | 32 | +| Local variable 5 of method System.Reflection.Metadata.MetadataUpdater.ApplyUpdate | local | 32 | +| Local variable 5 of method System.Runtime.InteropServices.Marshal.StringToCoTaskMemUTF8 | local | 32 | +| Local variable 5 of method System.Runtime.InteropServices.Marshal.StringToHGlobalUTF8 | local | 32 | +| Local variable 5 of method System.String.Replace | local | 32 | +| Local variable 5 of method System.Text.ASCIIEncoding.GetBytesWithFallback | local | 32 | +| Local variable 5 of method System.Text.ASCIIEncoding.GetCharsWithFallback | local | 32 | +| Local variable 5 of method System.Text.Encoding.GetBytes | local | 32 | +| Local variable 5 of method System.Text.StringBuilder.Insert | local | 32 | +| Local variable 6 of method System.Array.Copy | local | 32 | +| Local variable 6 of method System.Collections.Generic.Dictionary.Remove | local | 32 | +| Local variable 6 of method System.Collections.Generic.GenericArraySortHelper.PickPivotAndPartition | local | 32 | +| Local variable 6 of method System.Collections.Generic.HashSet.FindItemIndex | local | 32 | +| Local variable 6 of method System.Collections.Generic.HashSet.Remove | local | 32 | +| Local variable 6 of method System.Collections.Generic.HashSet.Resize | local | 32 | +| Local variable 6 of method System.Convert.ConvertToBase64Array | local | 32 | +| Local variable 6 of method System.Convert.ToBase64CharArray | local | 32 | +| Local variable 6 of method System.Convert.TryDecodeFromUtf16 | local | 32 | +| Local variable 6 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForProperty | local | 32 | +| Local variable 6 of method System.Globalization.IdnMapping.IcuGetAsciiCore | local | 32 | +| Local variable 6 of method System.Guid.TryFormat | local | 32 | +| Local variable 6 of method System.IO.Path.JoinInternal | local | 32 | +| Local variable 6 of method System.Reflection.Emit.TypeBuilder.SetConstantValue | local | 32 | +| Local variable 6 of method System.Reflection.Metadata.MetadataUpdater.ApplyUpdate | local | 32 | +| Local variable 6 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | +| Local variable 7 of method System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | local | 32 | +| Local variable 7 of method System.Collections.Generic.Dictionary.TryInsert | local | 32 | +| Local variable 7 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | +| Local variable 7 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadata | local | 32 | +| Local variable 7 of method System.Globalization.CompareInfo.IcuGetHashCodeOfString | local | 32 | +| Local variable 7 of method System.Globalization.Normalization.IcuNormalize | local | 32 | +| Local variable 7 of method System.IO.Path.JoinInternal | local | 32 | +| Local variable 7 of method System.Number.BigInteger.Pow10 | local | 32 | +| Local variable 7 of method System.Reflection.Metadata.MetadataUpdater.ApplyUpdate | local | 32 | +| Local variable 7 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | +| Local variable 7 of method System.RuntimeType.RuntimeTypeCache.MemberInfoCache.Populate | local | 32 | +| Local variable 7 of method System.StubHelpers.CSTRMarshaler.ConvertFixedToNative | local | 32 | +| Local variable 7 of method System.Text.ASCIIEncoding.GetBytesWithFallback | local | 32 | +| Local variable 7 of method System.Text.ASCIIEncoding.GetCharsWithFallback | local | 32 | +| Local variable 8 of method System.Convert.ToBase64CharArray | local | 32 | +| Local variable 8 of method System.Diagnostics.Tracing.EventSource.WriteEventString | local | 32 | +| Local variable 8 of method System.IO.Path.JoinInternal | local | 32 | +| Local variable 8 of method System.Number.BigInteger.Pow10 | local | 32 | +| Local variable 8 of method System.Reflection.Emit.TypeBuilder.SetConstantValue | local | 32 | +| Local variable 9 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | +| Local variable 9 of method System.Collections.Generic.HashSet.FindItemIndex | local | 32 | +| Local variable 9 of method System.Collections.Generic.HashSet.IntersectWithEnumerable | local | 32 | +| Local variable 9 of method System.Collections.Generic.HashSet.TrimExcess | local | 32 | +| Local variable 9 of method System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForProperty | local | 32 | +| Local variable 9 of method System.Diagnostics.Tracing.EventPipeInternal.Enable | local | 32 | +| Local variable 9 of method System.Globalization.CompareInfo.IcuGetHashCodeOfString | local | 32 | +| Local variable 9 of method System.Globalization.Normalization.IcuNormalize | local | 32 | +| Local variable 9 of method System.IO.Path.JoinInternal | local | 32 | +| Local variable 9 of method System.String.g__GetNonRandomizedHashCodeOrdinalIgnoreCaseSlow\|47_0 | local | 32 | +| Local variable 10 of method System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | local | 32 | +| Local variable 10 of method System.Collections.Generic.HashSet.TrimExcess | local | 32 | +| Local variable 10 of method System.IO.Path.JoinInternal | local | 32 | +| Local variable 10 of method System.Number.FormatFixed | local | 32 | +| Local variable 10 of method System.ParseNumbers.IntToString | local | 32 | +| Local variable 10 of method System.ParseNumbers.LongToString | local | 32 | +| Local variable 10 of method System.String.JoinCore | local | 32 | +| Local variable 10 of method System.Text.StringBuilder.ReplaceAllInChunk | local | 32 | +| Local variable 11 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | +| Local variable 11 of method System.Globalization.CompareInfo.IcuGetHashCodeOfString | local | 32 | +| Local variable 11 of method System.IO.RandomAccess.ReadScatterAtOffset | local | 32 | +| Local variable 11 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | +| Local variable 12 of method System.Collections.Generic.HashSet.FindItemIndex | local | 32 | +| Local variable 12 of method System.Diagnostics.Tracing.EventSource.WriteMultiMerge | local | 32 | +| Local variable 13 of method System.Collections.Generic.HashSet.AddIfNotPresent | local | 32 | +| Local variable 13 of method System.Globalization.TextInfo.ChangeCaseCommon | local | 32 | +| Local variable 14 of method System.IO.RandomAccess.WriteGatherAtOffset | local | 32 | +| Local variable 14 of method System.Runtime.CompilerServices.ConditionalWeakTable.Container.Resize | local | 32 | +| Local variable 15 of method System.Diagnostics.Tracing.EventSource.WriteImpl | local | 32 | +| Local variable 18 of method System.Diagnostics.Tracing.EventSource.WriteMultiMergeInner | local | 32 | +| Local variable 19 of method System.Number.NumberToStringFormat | local | 32 | +| Local variable 21 of method System.Diagnostics.Tracing.EventPipeMetadataGenerator.GenerateMetadata | local | 32 | +| Local variable 27 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 28 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 29 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 30 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 30 of method System.Numerics.Matrix4x4.g__SseImpl\|65_0 | local | 32 | +| Local variable 31 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 31 of method System.Number.NumberToStringFormat | local | 32 | +| Local variable 32 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 33 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 34 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Local variable 38 of method System.Diagnostics.Tracing.EventProvider.WriteEvent | local | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.Add | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.AddByteOffset | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.AreSame | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.As | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.AsPointer | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.AsRef | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.ByteOffset | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.InitBlockUnaligned | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.IsAddressLessThan | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.IsNullRef | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.Read | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.ReadUnaligned | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.SkipInit | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.Write | parameter | 32 | +| Parameter 0 of Internal.Runtime.CompilerServices.Unsafe.WriteUnaligned | parameter | 32 | +| Parameter 0 of Interop.Sys.GetCpuUtilization | parameter | 32 | +| Parameter 0 of Interop.Sys.GetWindowSize | parameter | 32 | +| Parameter 0 of Interop.Sys.LStat | parameter | 32 | +| Parameter 0 of Interop.Sys.ReadLink | parameter | 32 | +| Parameter 0 of Interop.Sys.Stat | parameter | 32 | +| Parameter 0 of System.Array.Resize | parameter | 32 | +| Parameter 0 of System.Buffer.BulkMoveWithWriteBarrier | parameter | 32 | +| Parameter 0 of System.Buffer.Memmove | parameter | 32 | +| Parameter 0 of System.Buffer._BulkMoveWithWriteBarrier | parameter | 32 | +| Parameter 0 of System.Buffer._Memmove | parameter | 32 | +| Parameter 0 of System.Buffer._ZeroMemory | parameter | 32 | +| Parameter 0 of System.Buffer.__BulkMoveWithWriteBarrier | parameter | 32 | +| Parameter 0 of System.Buffers.Text.FormattingHelpers.GetSymbolOrDefault | parameter | 32 | +| Parameter 0 of System.Buffers.Text.FormattingHelpers.TryFormatThrowFormatException | parameter | 32 | +| Parameter 0 of System.Buffers.Text.ParserHelpers.TryParseThrowFormatException | parameter | 32 | +| Parameter 0 of System.Buffers.Text.Utf8Formatter.TryFormatDecimalE | parameter | 32 | +| Parameter 0 of System.Buffers.Text.Utf8Formatter.TryFormatDecimalF | parameter | 32 | +| Parameter 0 of System.Buffers.Text.Utf8Formatter.TryFormatDecimalG | parameter | 32 | +| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.GreaterThan | parameter | 32 | +| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.LessThan | parameter | 32 | +| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.Swap | parameter | 32 | +| Parameter 0 of System.Collections.Generic.GenericArraySortHelper.SwapIfGreater | parameter | 32 | +| Parameter 0 of System.ConsolePal.g__IncrementX\|113_1 | parameter | 32 | +| Parameter 0 of System.ConsolePal.g__IncrementY\|113_0 | parameter | 32 | +| Parameter 0 of System.ConsolePal.GetWindowSize | parameter | 32 | +| Parameter 0 of System.ConsolePal.RefreshColors | parameter | 32 | +| Parameter 0 of System.ConsolePal.TryGetCachedCursorPosition | parameter | 32 | +| Parameter 0 of System.ConsolePal.TryGetCursorPosition | parameter | 32 | +| Parameter 0 of System.Convert.Decode | parameter | 32 | +| Parameter 0 of System.Convert.WriteThreeLowOrderBytes | parameter | 32 | +| Parameter 0 of System.DateTimeParse.AdjustHour | parameter | 32 | +| Parameter 0 of System.DateTimeParse.AdjustTimeZoneToLocal | parameter | 32 | +| Parameter 0 of System.DateTimeParse.AdjustTimeZoneToUniversal | parameter | 32 | +| Parameter 0 of System.DateTimeParse.CheckDefaultDateTime | parameter | 32 | +| Parameter 0 of System.DateTimeParse.CheckNewValue | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ConfigureFormatOS | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ConfigureFormatR | parameter | 32 | +| Parameter 0 of System.DateTimeParse.DateTimeOffsetTimeZonePostProcessing | parameter | 32 | +| Parameter 0 of System.DateTimeParse.DetermineTimeZoneAdjustments | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDateOfDSN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDateOfNDS | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDateOfNNDS | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDateTimeNow | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDateTimeParseException | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfMN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfMNN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfNM | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfNN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfNNN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfNNY | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfYM | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfYMN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfYN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDayOfYNN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetDefaultYear | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetHebrewDayOfNM | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetTimeOfN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetTimeOfNN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetTimeOfNNN | parameter | 32 | +| Parameter 0 of System.DateTimeParse.GetTimeZoneName | parameter | 32 | +| Parameter 0 of System.DateTimeParse.HandleTimeZone | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchAbbreviatedDayName | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchAbbreviatedMonthName | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchAbbreviatedTimeMark | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchDayName | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchEraName | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchHebrewDigits | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchMonthName | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchTimeMark | parameter | 32 | +| Parameter 0 of System.DateTimeParse.MatchWord | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseByFormat | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseDigits | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseFraction | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseFractionExact | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseISO8601 | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseJapaneseEraStart | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseSign | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseTimeZone | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ParseTimeZoneOffset | parameter | 32 | +| Parameter 0 of System.DateTimeParse.ProcessDateTimeSuffix | parameter | 32 | +| Parameter 0 of System.DateTimeParse.SetDateDMY | parameter | 32 | +| Parameter 0 of System.DateTimeParse.SetDateMDY | parameter | 32 | +| Parameter 0 of System.DateTimeParse.SetDateYDM | parameter | 32 | +| Parameter 0 of System.DateTimeParse.SetDateYMD | parameter | 32 | +| Parameter 0 of System.DateTimeParse.TryAdjustYear | parameter | 32 | +| Parameter 0 of System.DateTimeParse.VerifyValidPunctuation | parameter | 32 | +| Parameter 0 of System.Decimal.Abs | parameter | 32 | +| Parameter 0 of System.Decimal.AsMutable | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.Add32To96 | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.DecAddSub | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.DecDivMod1E9 | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.Div96By32 | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.Div96By64 | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.Div96ByConst | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.Div128By96 | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.GetHashCode | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.IncreaseScale | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.IncreaseScale64 | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.InternalRound | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.OverflowUnscale | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.SearchScale | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.Unscale | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarCyFromDec | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarDecCmp | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarDecCmpSub | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarDecDiv | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarDecMod | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarDecModFull | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarDecMul | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarR4FromDec | parameter | 32 | +| Parameter 0 of System.Decimal.DecCalc.VarR8FromDec | parameter | 32 | +| Parameter 0 of System.Decimal.DecDivMod1E9 | parameter | 32 | +| Parameter 0 of System.Decimal.GetBytes | parameter | 32 | +| Parameter 0 of System.Decimal.Max | parameter | 32 | +| Parameter 0 of System.Decimal.Min | parameter | 32 | +| Parameter 0 of System.Decimal.Round | parameter | 32 | +| Parameter 0 of System.Decimal.Sign | parameter | 32 | +| Parameter 0 of System.Decimal.Truncate | parameter | 32 | +| Parameter 0 of System.Diagnostics.Contracts.Contract.ValueAtReturn | parameter | 32 | +| Parameter 0 of System.Diagnostics.StackTrace.TryResolveStateMachineMethod | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.WriteNibble | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.EventPipePayloadDecoder.DecodePayload | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.EventSource.AddEventDescriptor | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.EventSource.DebugCheckEvent | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.EventSource.RemoveFirstArgIfRelatedActivityId | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.EventSource.TrimEventDescriptors | parameter | 32 | +| Parameter 0 of System.Diagnostics.Tracing.ManifestBuilder.UpdateStringBuilder | parameter | 32 | +| Parameter 0 of System.Globalization.CultureData.GetDefaultLocaleName | parameter | 32 | +| Parameter 0 of System.Globalization.DateTimeFormatInfo.TryParseHebrewNumber | parameter | 32 | +| Parameter 0 of System.Globalization.GlobalizationMode.TryGetAppLocalIcuSwitchValue | parameter | 32 | +| Parameter 0 of System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | parameter | 32 | +| Parameter 0 of System.Globalization.InvariantModeCasing.GetScalar | parameter | 32 | +| Parameter 0 of System.Globalization.Ordinal.CompareStringIgnoreCase | parameter | 32 | +| Parameter 0 of System.Globalization.Ordinal.CompareStringIgnoreCaseNonAscii | parameter | 32 | +| Parameter 0 of System.Globalization.Ordinal.EqualsIgnoreCase | parameter | 32 | +| Parameter 0 of System.Globalization.OrdinalCasing.CompareStringIgnoreCase | parameter | 32 | +| Parameter 0 of System.Globalization.TextInfo.AddNonLetter | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ParseExactLiteral | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminalState | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_D | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_DHMSF | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_HM | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_HMS_F_D | parameter | 32 | +| Parameter 0 of System.Globalization.TimeSpanParse.ProcessTerminal_HM_S_D | parameter | 32 | +| Parameter 0 of System.Guid.EqualsCore | parameter | 32 | +| Parameter 0 of System.HashCode.Initialize | parameter | 32 | +| Parameter 0 of System.IO.Enumeration.FileSystemEntry.Initialize | parameter | 32 | +| Parameter 0 of System.IO.Enumeration.FileSystemEnumerableFactory.NormalizeInputs | parameter | 32 | +| Parameter 0 of System.IO.FileSystem.g__GetLinkTargetFullPath\|27_0 | parameter | 32 | +| Parameter 0 of System.Marvin.Block | parameter | 32 | +| Parameter 0 of System.Marvin.ComputeHash32 | parameter | 32 | +| Parameter 0 of System.Marvin.ComputeHash32OrdinalIgnoreCase | parameter | 32 | +| Parameter 0 of System.Marvin.ComputeHash32OrdinalIgnoreCaseSlow | parameter | 32 | +| Parameter 0 of System.Number.AccumulateDecimalDigitsIntoBigInteger | parameter | 32 | +| Parameter 0 of System.Number.AssembleFloatingPointBits | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.Add | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.AddDivisor | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.Compare | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.CountSignificantBits | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.DivRem | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.HeuristicDivide | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.Multiply | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.SetUInt32 | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.SetUInt64 | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.SetValue | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.SetZero | parameter | 32 | +| Parameter 0 of System.Number.BigInteger.SubtractDivisor | parameter | 32 | +| Parameter 0 of System.Number.ConvertBigIntegerToFloatingPointBits | parameter | 32 | +| Parameter 0 of System.Number.DecimalToNumber | parameter | 32 | +| Parameter 0 of System.Number.FormatCurrency | parameter | 32 | +| Parameter 0 of System.Number.FormatDouble | parameter | 32 | +| Parameter 0 of System.Number.FormatExponent | parameter | 32 | +| Parameter 0 of System.Number.FormatFixed | parameter | 32 | +| Parameter 0 of System.Number.FormatGeneral | parameter | 32 | +| Parameter 0 of System.Number.FormatHalf | parameter | 32 | +| Parameter 0 of System.Number.FormatNumber | parameter | 32 | +| Parameter 0 of System.Number.FormatPercent | parameter | 32 | +| Parameter 0 of System.Number.FormatScientific | parameter | 32 | +| Parameter 0 of System.Number.FormatSingle | parameter | 32 | +| Parameter 0 of System.Number.Grisu3.TryDigitGenCounted | parameter | 32 | +| Parameter 0 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | +| Parameter 0 of System.Number.Grisu3.TryRunCounted | parameter | 32 | +| Parameter 0 of System.Number.Grisu3.TryRunShortest | parameter | 32 | +| Parameter 0 of System.Number.Int64DivMod1E9 | parameter | 32 | +| Parameter 0 of System.Number.NumberToDouble | parameter | 32 | +| Parameter 0 of System.Number.NumberToDoubleFloatingPointBits | parameter | 32 | +| Parameter 0 of System.Number.NumberToFloatingPointBitsSlow | parameter | 32 | +| Parameter 0 of System.Number.NumberToHalf | parameter | 32 | +| Parameter 0 of System.Number.NumberToHalfFloatingPointBits | parameter | 32 | +| Parameter 0 of System.Number.NumberToSingle | parameter | 32 | +| Parameter 0 of System.Number.NumberToSingleFloatingPointBits | parameter | 32 | +| Parameter 0 of System.Number.NumberToString | parameter | 32 | +| Parameter 0 of System.Number.NumberToStringFormat | parameter | 32 | +| Parameter 0 of System.Number.RoundNumber | parameter | 32 | +| Parameter 0 of System.Number.TryNumberToDecimal | parameter | 32 | +| Parameter 0 of System.Number.TryNumberToInt32 | parameter | 32 | +| Parameter 0 of System.Number.TryNumberToInt64 | parameter | 32 | +| Parameter 0 of System.Number.TryNumberToUInt32 | parameter | 32 | +| Parameter 0 of System.Number.TryNumberToUInt64 | parameter | 32 | +| Parameter 0 of System.Number.TryParseNumber | parameter | 32 | +| Parameter 0 of System.PasteArguments.AppendArgument | parameter | 32 | +| Parameter 0 of System.Reflection.Assembly.GetExecutingAssembly | parameter | 32 | +| Parameter 0 of System.Reflection.CustomAttribute.AddCustomAttributes | parameter | 32 | +| Parameter 0 of System.Reflection.MethodBase.AppendParameters | parameter | 32 | +| Parameter 0 of System.Reflection.RuntimeMethodInfo.InternalGetCurrentMethod | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.GetStateMachineBox | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.Element | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.HashShift | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.KeyToBucket | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.StelemRef_Helper_NoCacheLookup | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.TableMask | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.CastHelpers.WriteBarrier | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.ObjectHandleOnStack.Create | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 0 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.GetStateMachineBox | parameter | 32 | +| Parameter 0 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl | parameter | 32 | +| Parameter 0 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | parameter | 32 | +| Parameter 0 of System.Runtime.InteropServices.MemoryMarshal.CreateReadOnlySpan | parameter | 32 | +| Parameter 0 of System.Runtime.InteropServices.MemoryMarshal.CreateSpan | parameter | 32 | +| Parameter 0 of System.Runtime.Intrinsics.Vector128.g__SoftwareFallback\|12_0 | parameter | 32 | +| Parameter 0 of System.Runtime.Intrinsics.Vector256.g__SoftwareFallback\|14_0 | parameter | 32 | +| Parameter 0 of System.Runtime.Loader.AssemblyLoadContext.StartAssemblyLoad | parameter | 32 | +| Parameter 0 of System.Runtime.Loader.AssemblyLoadContext.StopAssemblyLoad | parameter | 32 | +| Parameter 0 of System.Runtime.MemoryFailPoint.CheckForAvailableMemory | parameter | 32 | +| Parameter 0 of System.RuntimeMethodHandle.GetCurrentMethod | parameter | 32 | +| Parameter 0 of System.RuntimeMethodHandle._GetCurrentMethod | parameter | 32 | +| Parameter 0 of System.RuntimeTypeHandle.GetNextIntroducedMethod | parameter | 32 | +| Parameter 0 of System.SpanHelpers.Add | parameter | 32 | +| Parameter 0 of System.SpanHelpers.BinarySearch | parameter | 32 | +| Parameter 0 of System.SpanHelpers.ClearWithReferences | parameter | 32 | +| Parameter 0 of System.SpanHelpers.ClearWithoutReferences | parameter | 32 | +| Parameter 0 of System.SpanHelpers.Contains | parameter | 32 | +| Parameter 0 of System.SpanHelpers.Fill | parameter | 32 | +| Parameter 0 of System.SpanHelpers.IndexOf | parameter | 32 | +| Parameter 0 of System.SpanHelpers.IndexOfAny | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LastIndexOf | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LastIndexOfAny | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LoadNUInt | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LoadUInt | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LoadUShort | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LoadVector | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LoadVector128 | parameter | 32 | +| Parameter 0 of System.SpanHelpers.LoadVector256 | parameter | 32 | +| Parameter 0 of System.SpanHelpers.SequenceCompareTo | parameter | 32 | +| Parameter 0 of System.SpanHelpers.SequenceEqual | parameter | 32 | +| Parameter 0 of System.SpanHelpers.UnalignedCountVector | parameter | 32 | +| Parameter 0 of System.SpanHelpers.UnalignedCountVector128 | parameter | 32 | +| Parameter 0 of System.SpanHelpers.UnalignedCountVectorFromEnd | parameter | 32 | +| Parameter 0 of System.String.g__ReadVector\|201_0 | parameter | 32 | +| Parameter 0 of System.StubHelpers.CleanupWorkListElement.AddToCleanupList | parameter | 32 | +| Parameter 0 of System.StubHelpers.StubHelpers.AddToCleanupList | parameter | 32 | +| Parameter 0 of System.StubHelpers.StubHelpers.DestroyCleanupList | parameter | 32 | +| Parameter 0 of System.StubHelpers.StubHelpers.KeepAliveViaCleanupList | parameter | 32 | +| Parameter 0 of System.Text.ASCIIUtility.NarrowFourUtf16CharsToAsciiAndWriteToBuffer | parameter | 32 | +| Parameter 0 of System.Text.ASCIIUtility.NarrowTwoUtf16CharsToAsciiAndWriteToBuffer | parameter | 32 | +| Parameter 0 of System.Text.ASCIIUtility.WidenFourAsciiBytesToUtf16AndWriteToBuffer | parameter | 32 | +| Parameter 0 of System.Text.Latin1Utility.NarrowFourUtf16CharsToLatin1AndWriteToBuffer | parameter | 32 | +| Parameter 0 of System.Text.Latin1Utility.NarrowTwoUtf16CharsToLatin1AndWriteToBuffer | parameter | 32 | +| Parameter 0 of System.Text.Unicode.Utf8Utility.IsUtf8ContinuationByte | parameter | 32 | +| Parameter 0 of System.Text.Unicode.Utf8Utility.WriteFirstUtf16CharAsUtf8ThreeByteSequence | parameter | 32 | +| Parameter 0 of System.Text.Unicode.Utf8Utility.WriteTwoUtf16CharsAsTwoUtf8ThreeByteSequences | parameter | 32 | +| Parameter 0 of System.Threading.CancellationTokenSource.Registrations.g__Contention\|13_0 | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.Add | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.And | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.CompareExchange | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.Decrement | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.Exchange | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.ExchangeAdd | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.Increment | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.Or | parameter | 32 | +| Parameter 0 of System.Threading.Interlocked.Read | parameter | 32 | +| Parameter 0 of System.Threading.LazyInitializer.EnsureInitialized | parameter | 32 | +| Parameter 0 of System.Threading.LazyInitializer.EnsureInitializedCore | parameter | 32 | +| Parameter 0 of System.Threading.LazyInitializer.EnsureLockInitialized | parameter | 32 | +| Parameter 0 of System.Threading.OverlappedData.CheckVMForIOPacket | parameter | 32 | +| Parameter 0 of System.Threading.SpinLock.CompareExchange | parameter | 32 | +| Parameter 0 of System.Threading.Tasks.Task.AddExceptionsForCompletedTask | parameter | 32 | +| Parameter 0 of System.Threading.Thread.VolatileRead | parameter | 32 | +| Parameter 0 of System.Threading.Thread.VolatileWrite | parameter | 32 | +| Parameter 0 of System.Threading.ThreadLocal.GrowTable | parameter | 32 | +| Parameter 0 of System.Threading.ThreadPool.GetAvailableThreads | parameter | 32 | +| Parameter 0 of System.Threading.ThreadPool.GetAvailableThreadsNative | parameter | 32 | +| Parameter 0 of System.Threading.ThreadPool.GetMaxThreads | parameter | 32 | +| Parameter 0 of System.Threading.ThreadPool.GetMaxThreadsNative | parameter | 32 | +| Parameter 0 of System.Threading.ThreadPool.GetMinThreads | parameter | 32 | +| Parameter 0 of System.Threading.ThreadPool.GetMinThreadsNative | parameter | 32 | +| Parameter 0 of System.Threading.Volatile.Read | parameter | 32 | +| Parameter 0 of System.Threading.Volatile.Write | parameter | 32 | +| Parameter 0 of System.TimeZoneInfo.AdjustmentRule.AdjustDaylightDeltaToExpectedRange | parameter | 32 | +| Parameter 0 of System.TimeZoneInfo.GetDirectoryEntryFullPath | parameter | 32 | +| Parameter 0 of System.TimeZoneInfo.TZif_GenerateAdjustmentRule | parameter | 32 | +| Parameter 0 of System.TimeZoneInfo.TZif_GenerateAdjustmentRules | parameter | 32 | +| Parameter 0 of System.TimeZoneInfo.TryGetLocalTzFile | parameter | 32 | +| Parameter 1 of Internal.Runtime.CompilerServices.Unsafe.AreSame | parameter | 32 | +| Parameter 1 of Internal.Runtime.CompilerServices.Unsafe.ByteOffset | parameter | 32 | +| Parameter 1 of Internal.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan | parameter | 32 | +| Parameter 1 of Internal.Runtime.CompilerServices.Unsafe.IsAddressLessThan | parameter | 32 | +| Parameter 1 of Interop.Advapi32.EtwEnableCallback.Invoke | parameter | 32 | +| Parameter 1 of Interop.Globalization.GetJapaneseEraStartDate | parameter | 32 | +| Parameter 1 of Interop.Globalization.GetSortHandle | parameter | 32 | +| Parameter 1 of Interop.Kernel32.GetEnvironmentVariable | parameter | 32 | +| Parameter 1 of Interop.Sys.FStat | parameter | 32 | +| Parameter 1 of Interop.Sys.GetPwUidR | parameter | 32 | +| Parameter 1 of Interop.Sys.LStat | parameter | 32 | +| Parameter 1 of Interop.Sys.Stat | parameter | 32 | +| Parameter 1 of Interop.Sys.TryGetFileSystemType | parameter | 32 | +| Parameter 1 of System.AppContext.TryGetSwitch | parameter | 32 | +| Parameter 1 of System.Boolean.TryParse | parameter | 32 | +| Parameter 1 of System.Buffer.BulkMoveWithWriteBarrier | parameter | 32 | +| Parameter 1 of System.Buffer.Memmove | parameter | 32 | +| Parameter 1 of System.Buffer._BulkMoveWithWriteBarrier | parameter | 32 | +| Parameter 1 of System.Buffer._Memmove | parameter | 32 | +| Parameter 1 of System.Buffer.__BulkMoveWithWriteBarrier | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadDoubleBigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadDoubleLittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadHalfBigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadHalfLittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt16BigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt16LittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt32BigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt32LittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt64BigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadInt64LittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadSingleBigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadSingleLittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt16BigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt16LittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt32BigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt32LittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt64BigEndian | parameter | 32 | +| Parameter 1 of System.Buffers.Binary.BinaryPrimitives.TryReadUInt64LittleEndian | parameter | 32 | +| Parameter 1 of System.Buffers.MemoryManager.TryGetArray | parameter | 32 | +| Parameter 1 of System.Buffers.StandardFormat.ParseHelper | parameter | 32 | +| Parameter 1 of System.Buffers.StandardFormat.TryParse | parameter | 32 | +| Parameter 1 of System.Buffers.Text.FormattingHelpers.CountDecimalTrailingZeros | parameter | 32 | +| Parameter 1 of System.Buffers.Text.ParserHelpers.TryParseThrowFormatException | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParse | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseByteD | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseByteN | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseByteX | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseDateTimeG | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetDefault | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseGuidCore | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseGuidN | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt16D | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt16N | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt32D | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt32N | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt64D | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseInt64N | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseNumber | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseSByteD | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseSByteN | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanBigG | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanC | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanFraction | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanLittleG | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt16D | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt16N | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt16X | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt32D | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt32N | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt32X | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt64D | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt64N | parameter | 32 | +| Parameter 1 of System.Buffers.Text.Utf8Parser.TryParseUInt64X | parameter | 32 | +| Parameter 1 of System.ByReference..ctor | parameter | 32 | +| Parameter 1 of System.Byte.TryCreate | parameter | 32 | +| Parameter 1 of System.Byte.TryParse | parameter | 32 | +| Parameter 1 of System.Char.TryCreate | parameter | 32 | +| Parameter 1 of System.Char.TryParse | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryDequeue | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryDequeueSlow | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryPeek | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueue.TryTake | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueueSegment.TryDequeue | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.ConcurrentQueueSegment.TryPeek | parameter | 32 | +| Parameter 1 of System.Collections.Concurrent.IProducerConsumerCollection.TryTake | parameter | 32 | +| Parameter 1 of System.Collections.DictionaryEntry.Deconstruct | parameter | 32 | +| Parameter 1 of System.Collections.Generic.EnumerableHelpers.ToArray | parameter | 32 | +| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.GreaterThan | parameter | 32 | +| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.LessThan | parameter | 32 | +| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.Swap | parameter | 32 | +| Parameter 1 of System.Collections.Generic.GenericArraySortHelper.SwapIfGreater | parameter | 32 | +| Parameter 1 of System.Collections.Generic.KeyValuePair.Deconstruct | parameter | 32 | +| Parameter 1 of System.Collections.Generic.Queue.MoveNext | parameter | 32 | +| Parameter 1 of System.Collections.Generic.Queue.TryDequeue | parameter | 32 | +| Parameter 1 of System.Collections.Generic.Queue.TryPeek | parameter | 32 | +| Parameter 1 of System.Collections.Generic.Stack.TryPop | parameter | 32 | +| Parameter 1 of System.ConsolePal.GetWindowSize | parameter | 32 | +| Parameter 1 of System.ConsolePal.TryGetCachedCursorPosition | parameter | 32 | +| Parameter 1 of System.ConsolePal.TryGetCursorPosition | parameter | 32 | +| Parameter 1 of System.Convert.Decode | parameter | 32 | +| Parameter 1 of System.CultureAwareComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | +| Parameter 1 of System.DateOnly.TryParse | parameter | 32 | +| Parameter 1 of System.DateTime.GetDate | parameter | 32 | +| Parameter 1 of System.DateTime.GetTime | parameter | 32 | +| Parameter 1 of System.DateTime.GetTimePrecise | parameter | 32 | +| Parameter 1 of System.DateTime.TryParse | parameter | 32 | +| Parameter 1 of System.DateTimeFormat.ExpandPredefinedFormat | parameter | 32 | +| Parameter 1 of System.DateTimeOffset.TryParse | parameter | 32 | +| Parameter 1 of System.DateTimeParse.AdjustTimeMark | parameter | 32 | +| Parameter 1 of System.DateTimeParse.CheckDefaultDateTime | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ConfigureFormatOS | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ConfigureFormatR | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ExpandPredefinedFormat | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDateOfDSN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDateOfNDS | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDateOfNNDS | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDateTimeNow | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfMN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfMNN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfNM | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfNN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfNNN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfNNY | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfYM | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfYMN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfYN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDayOfYNN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetDefaultYear | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetHebrewDayOfNM | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetMonthDayOrder | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetTimeOfN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetTimeOfNN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetTimeOfNNN | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetYearMonthDayOrder | parameter | 32 | +| Parameter 1 of System.DateTimeParse.GetYearMonthOrder | parameter | 32 | +| Parameter 1 of System.DateTimeParse.HandleTimeZone | parameter | 32 | +| Parameter 1 of System.DateTimeParse.Lex | parameter | 32 | +| Parameter 1 of System.DateTimeParse.MatchNumberDelegate.Invoke | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseByFormat | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseFormatO | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseFormatR | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseFraction | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseISO8601 | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseSign | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ParseTimeZone | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ProcessDateTimeSuffix | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ProcessHebrewTerminalState | parameter | 32 | +| Parameter 1 of System.DateTimeParse.ProcessTerminalState | parameter | 32 | +| Parameter 1 of System.Decimal..ctor | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.DecAddSub | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.Div96ByConst | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.Div128By96 | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.Unscale | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecCmp | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecCmpSub | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecDiv | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecFromR4 | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecFromR8 | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecMod | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecModFull | parameter | 32 | +| Parameter 1 of System.Decimal.DecCalc.VarDecMul | parameter | 32 | +| Parameter 1 of System.Decimal.Max | parameter | 32 | +| Parameter 1 of System.Decimal.Min | parameter | 32 | +| Parameter 1 of System.Decimal.TryCreate | parameter | 32 | +| Parameter 1 of System.Decimal.TryParse | parameter | 32 | +| Parameter 1 of System.DefaultBinder.ReorderArgumentArray | parameter | 32 | +| Parameter 1 of System.Diagnostics.Debug.Assert | parameter | 32 | +| Parameter 1 of System.Diagnostics.Debug.WriteIf | parameter | 32 | +| Parameter 1 of System.Diagnostics.Debug.WriteLineIf | parameter | 32 | +| Parameter 1 of System.Diagnostics.StackTrace.TryResolveStateMachineMethod | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.CreateActivityPathGuid | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLength | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLengthForTypeV2 | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLengthV2 | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventParameterInfo.GetTypeInfoFromType | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventPipeEventProvider.EventActivityIdControl | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventPipeInternal.EventActivityIdControl | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventPipeInternal.EventPipeProviderConfigurationNative.MarshalToNative | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventProvider.EtwEnableCallBack | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventProvider.SessionInfoCallback.EndInvoke | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventProvider.WriteEvent | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventProvider.WriteEventRaw | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.EventSource.SetCurrentThreadActivityId | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.FieldMetadata.Encode | parameter | 32 | +| Parameter 1 of System.Diagnostics.Tracing.Statics.EncodeTags | parameter | 32 | +| Parameter 1 of System.Double.TryCreate | parameter | 32 | +| Parameter 1 of System.Double.TryParse | parameter | 32 | +| Parameter 1 of System.Enum.TryParse | parameter | 32 | +| Parameter 1 of System.Exception.g__Write\|60_0 | parameter | 32 | +| Parameter 1 of System.Exception.GetStackTracesDeepCopy | parameter | 32 | +| Parameter 1 of System.Exception.RestoreDispatchState | parameter | 32 | +| Parameter 1 of System.Globalization.CultureData.GetLocaleName | parameter | 32 | +| Parameter 1 of System.Globalization.CultureData.IsValidCultureName | parameter | 32 | +| Parameter 1 of System.Globalization.CultureData.NormalizeCultureName | parameter | 32 | +| Parameter 1 of System.Globalization.DateTimeFormatInfo.TryParseHebrewNumber | parameter | 32 | +| Parameter 1 of System.Globalization.DateTimeFormatInfo.YearMonthAdjustment | parameter | 32 | +| Parameter 1 of System.Globalization.HebrewNumber.ParseByChar | parameter | 32 | +| Parameter 1 of System.Globalization.JapaneseCalendar.GetJapaneseEraStartDate | parameter | 32 | +| Parameter 1 of System.Globalization.Ordinal.EqualsIgnoreCase | parameter | 32 | +| Parameter 1 of System.Globalization.TextInfo.AddNonLetter | parameter | 32 | +| Parameter 1 of System.Globalization.TextInfo.AddTitlecaseLetter | parameter | 32 | +| Parameter 1 of System.Globalization.TextInfo.ChangeCaseCommon | parameter | 32 | +| Parameter 1 of System.Globalization.TimeSpanParse.StringParser.ParseTime | parameter | 32 | +| Parameter 1 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.ProcessToken | parameter | 32 | +| Parameter 1 of System.Globalization.TimeSpanParse.TryParseTimeSpanConstant | parameter | 32 | +| Parameter 1 of System.Globalization.UmAlQuraCalendar.ConvertGregorianToHijri | parameter | 32 | +| Parameter 1 of System.Guid.g__TryCompatParsing\|30_0 | parameter | 32 | +| Parameter 1 of System.Guid.EqualsCore | parameter | 32 | +| Parameter 1 of System.Guid.TryParse | parameter | 32 | +| Parameter 1 of System.Guid.TryParseExactB | parameter | 32 | +| Parameter 1 of System.Guid.TryParseExactD | parameter | 32 | +| Parameter 1 of System.Guid.TryParseExactN | parameter | 32 | +| Parameter 1 of System.Guid.TryParseExactP | parameter | 32 | +| Parameter 1 of System.Guid.TryParseExactX | parameter | 32 | +| Parameter 1 of System.Guid.TryParseGuid | parameter | 32 | +| Parameter 1 of System.Guid.TryParseHex | parameter | 32 | +| Parameter 1 of System.Half.TryCreate | parameter | 32 | +| Parameter 1 of System.Half.TryParse | parameter | 32 | +| Parameter 1 of System.HashCode.Initialize | parameter | 32 | +| Parameter 1 of System.INumber.TryCreate | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.DelegateEnumerator.ShouldIncludeEntry | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.DelegateEnumerator.ShouldRecurseIntoEntry | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.DelegateEnumerator.TransformEntry | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindPredicate.BeginInvoke | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindPredicate.EndInvoke | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindPredicate.Invoke | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindTransform.BeginInvoke | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindTransform.EndInvoke | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerable.FindTransform.Invoke | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.b__7_0 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.b__6_0 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.b__8_0 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.b__4_0 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.b__5_0 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c.b__3_0 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass3_0.b__1 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass4_0.b__1 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass5_0.b__1 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass6_0.b__1 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass7_0.b__1 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.<>c__DisplayClass8_0.b__1 | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerableFactory.NormalizeInputs | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator.ShouldIncludeEntry | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator.ShouldRecurseIntoEntry | parameter | 32 | +| Parameter 1 of System.IO.Enumeration.FileSystemEnumerator.TransformEntry | parameter | 32 | +| Parameter 1 of System.IO.FileSystem.DirectoryExists | parameter | 32 | +| Parameter 1 of System.IO.FileSystem.FileExists | parameter | 32 | +| Parameter 1 of System.IO.FileSystemInfo.Init | parameter | 32 | +| Parameter 1 of System.IO.MemoryStream.TryGetBuffer | parameter | 32 | +| Parameter 1 of System.IO.StdInReader.MapBufferToConsoleKey | parameter | 32 | +| Parameter 1 of System.IO.StdInReader.ReadKey | parameter | 32 | +| Parameter 1 of System.IO.SyncTextReader.ReadKey | parameter | 32 | +| Parameter 1 of System.IO.UnmanagedMemoryStreamWrapper.TryGetBuffer | parameter | 32 | +| Parameter 1 of System.Int16.TryCreate | parameter | 32 | +| Parameter 1 of System.Int16.TryParse | parameter | 32 | +| Parameter 1 of System.Int32.TryCreate | parameter | 32 | +| Parameter 1 of System.Int32.TryParse | parameter | 32 | +| Parameter 1 of System.Int64.TryCreate | parameter | 32 | +| Parameter 1 of System.Int64.TryParse | parameter | 32 | +| Parameter 1 of System.IntPtr.TryCreate | parameter | 32 | +| Parameter 1 of System.IntPtr.TryParse | parameter | 32 | +| Parameter 1 of System.LocalAppContextSwitches.GetCachedSwitchValue | parameter | 32 | +| Parameter 1 of System.LocalAppContextSwitches.GetCachedSwitchValueInternal | parameter | 32 | +| Parameter 1 of System.Marvin.Block | parameter | 32 | +| Parameter 1 of System.MemoryExtensions.TryWrite | parameter | 32 | +| Parameter 1 of System.ModuleHandle.GetPEKind | parameter | 32 | +| Parameter 1 of System.Net.WebUtility.ConvertSmpToUtf16 | parameter | 32 | +| Parameter 1 of System.Net.WebUtility.GetNextUnicodeScalarValueFromUtf16Surrogate | parameter | 32 | +| Parameter 1 of System.Net.WebUtility.HtmlDecode | parameter | 32 | +| Parameter 1 of System.Net.WebUtility.HtmlEncode | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.Add | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.Compare | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.DivRem | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.DivRem32 | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.HeuristicDivide | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.Multiply | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.Pow2 | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.Pow10 | parameter | 32 | +| Parameter 1 of System.Number.BigInteger.SetValue | parameter | 32 | +| Parameter 1 of System.Number.ConvertBigIntegerToFloatingPointBits | parameter | 32 | +| Parameter 1 of System.Number.DecimalToNumber | parameter | 32 | +| Parameter 1 of System.Number.DiyFp.CreateAndGetBoundaries | parameter | 32 | +| Parameter 1 of System.Number.DiyFp.Multiply | parameter | 32 | +| Parameter 1 of System.Number.DiyFp.Subtract | parameter | 32 | +| Parameter 1 of System.Number.ExtractFractionAndBiasedExponent | parameter | 32 | +| Parameter 1 of System.Number.FormatCurrency | parameter | 32 | +| Parameter 1 of System.Number.FormatFixed | parameter | 32 | +| Parameter 1 of System.Number.FormatGeneral | parameter | 32 | +| Parameter 1 of System.Number.FormatNumber | parameter | 32 | +| Parameter 1 of System.Number.FormatPercent | parameter | 32 | +| Parameter 1 of System.Number.FormatScientific | parameter | 32 | +| Parameter 1 of System.Number.GetFloatingPointMaxDigitsAndPrecision | parameter | 32 | +| Parameter 1 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | +| Parameter 1 of System.Number.Grisu3.TryRunShortest | parameter | 32 | +| Parameter 1 of System.Number.Int32ToNumber | parameter | 32 | +| Parameter 1 of System.Number.Int64ToNumber | parameter | 32 | +| Parameter 1 of System.Number.NumberToDoubleFloatingPointBits | parameter | 32 | +| Parameter 1 of System.Number.NumberToFloatingPointBitsSlow | parameter | 32 | +| Parameter 1 of System.Number.NumberToHalfFloatingPointBits | parameter | 32 | +| Parameter 1 of System.Number.NumberToSingleFloatingPointBits | parameter | 32 | +| Parameter 1 of System.Number.NumberToString | parameter | 32 | +| Parameter 1 of System.Number.NumberToStringFormat | parameter | 32 | +| Parameter 1 of System.Number.ParseFormatSpecifier | parameter | 32 | +| Parameter 1 of System.Number.TryNumberToDecimal | parameter | 32 | +| Parameter 1 of System.Number.TryNumberToInt32 | parameter | 32 | +| Parameter 1 of System.Number.TryNumberToInt64 | parameter | 32 | +| Parameter 1 of System.Number.TryNumberToUInt32 | parameter | 32 | +| Parameter 1 of System.Number.TryNumberToUInt64 | parameter | 32 | +| Parameter 1 of System.Number.UInt32ToNumber | parameter | 32 | +| Parameter 1 of System.Number.UInt64ToNumber | parameter | 32 | +| Parameter 1 of System.Numerics.Matrix3x2.Invert | parameter | 32 | +| Parameter 1 of System.Numerics.Matrix4x4.g__SoftwareFallback\|65_1 | parameter | 32 | +| Parameter 1 of System.Numerics.Matrix4x4.g__SseImpl\|65_0 | parameter | 32 | +| Parameter 1 of System.Numerics.Matrix4x4.Decompose | parameter | 32 | +| Parameter 1 of System.Numerics.Matrix4x4.Invert | parameter | 32 | +| Parameter 1 of System.Numerics.Vector.Widen | parameter | 32 | +| Parameter 1 of System.OrdinalComparer.IsWellKnownOrdinalComparerCore | parameter | 32 | +| Parameter 1 of System.ParseNumbers.EatWhiteSpace | parameter | 32 | +| Parameter 1 of System.ReadOnlyMemory.GetObjectStartLength | parameter | 32 | +| Parameter 1 of System.ReadOnlySpan..ctor | parameter | 32 | +| Parameter 1 of System.Reflection.Binder.ReorderArgumentArray | parameter | 32 | +| Parameter 1 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | +| Parameter 1 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | +| Parameter 1 of System.Reflection.CustomAttribute.ParseAttributeUsageAttribute | parameter | 32 | +| Parameter 1 of System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments | parameter | 32 | +| Parameter 1 of System.Reflection.Emit.DynamicResolver.GetCodeInfo | parameter | 32 | +| Parameter 1 of System.Reflection.Emit.DynamicResolver.GetJitContext | parameter | 32 | +| Parameter 1 of System.Reflection.Emit.MethodBuilder.GetLocalSignature | parameter | 32 | +| Parameter 1 of System.Reflection.Emit.ModuleBuilder.GetPEKind | parameter | 32 | +| Parameter 1 of System.Reflection.Emit.SignatureHelper.InternalGetSignature | parameter | 32 | +| Parameter 1 of System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata | parameter | 32 | +| Parameter 1 of System.Reflection.Metadata.AssemblyExtensions.TryGetRawMetadata | parameter | 32 | +| Parameter 1 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 1 of System.Reflection.MetadataImport.GetScopeProps | parameter | 32 | +| Parameter 1 of System.Reflection.MetadataImport._GetScopeProps | parameter | 32 | +| Parameter 1 of System.Reflection.MethodBase.CheckArguments | parameter | 32 | +| Parameter 1 of System.Reflection.Module.GetPEKind | parameter | 32 | +| Parameter 1 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | +| Parameter 1 of System.Reflection.RuntimeAssembly.InternalLoad | parameter | 32 | +| Parameter 1 of System.Reflection.RuntimeCustomAttributeData.GetCombinedList | parameter | 32 | +| Parameter 1 of System.Reflection.RuntimeModule.GetPEKind | parameter | 32 | +| Parameter 1 of System.Resolver.GetCodeInfo | parameter | 32 | +| Parameter 1 of System.Resolver.GetJitContext | parameter | 32 | +| Parameter 1 of System.Resources.ManifestBasedResourceGroveler.GetNeutralResourcesLanguage | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.MoveNext | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.GetStateMachineBox | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetException | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.SetNotificationForWaitCompletion | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.Start | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.Start | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable.ConfiguredValueTaskAwaiter..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.GetStateMachineBox | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.SetException | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.Start | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.QCallAssembly..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.QCallModule..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.QCallTypeHandle..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.StackCrawlMarkHandle..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.StringHandleOnStack..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.CompilerServices.ValueTaskAwaiter..ctor | parameter | 32 | +| Parameter 1 of System.Runtime.DependentHandle.InternalGetTargetAndDependent | parameter | 32 | +| Parameter 1 of System.Runtime.DependentHandle.UnsafeGetTargetAndDependent | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.EnumObjectParam | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.GetBindOptions | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.GetRunningObjectTable | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IBindCtx.SetBindOptions | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.EnumConnections | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.GetConnectionInterface | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.GetConnectionPointContainer | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.EnumConnectionPoints | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.FindConnectionPoint | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumConnectionPoints.Clone | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumConnections.Clone | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumMoniker.Clone | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IEnumString.Clone | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.GetClassID | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.GetSizeMax | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.Hash | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.Inverse | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IMoniker.IsSystemMoniker | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IPersistFile.GetClassID | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IPersistFile.GetCurFile | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.EnumRunning | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IStream.Clone | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.IStream.Stat | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetContainingTypeLib | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetCustData | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeAttr | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeComp | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeFlags | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetTypeKind | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetContainingTypeLib | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetTypeAttr | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetTypeComp | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetCustData | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetLibAttr | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeComp | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfoOfGuid | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetLibAttr | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeComp | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfoOfGuid | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComWrappers.CallICustomQueryInterface | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.ICustomQueryInterface.GetInterface | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.Marshal.QueryInterface | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryGetArray | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | +| 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.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 | +| Parameter 1 of System.Runtime.InteropServices.SafeBuffer.AcquirePointer | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.SafeHandle.DangerousAddRef | parameter | 32 | +| Parameter 1 of System.Runtime.Loader.AssemblyLoadContext.StartAssemblyLoad | parameter | 32 | +| Parameter 1 of System.Runtime.MemoryFailPoint.CheckForAvailableMemory | parameter | 32 | +| Parameter 1 of System.Runtime.Serialization.SerializationInfo.ThrowIfDeserializationInProgress | parameter | 32 | +| Parameter 1 of System.RuntimeMethodHandle.InvokeMethod | parameter | 32 | +| Parameter 1 of System.RuntimeType.FilterHelper | parameter | 32 | +| Parameter 1 of System.RuntimeType.GetGUID | parameter | 32 | +| Parameter 1 of System.RuntimeType.RuntimeTypeCache.ConstructName | parameter | 32 | +| Parameter 1 of System.RuntimeType.RuntimeTypeCache.GetMemberCache | parameter | 32 | +| Parameter 1 of System.RuntimeType.RuntimeTypeCache.GetMemberList | parameter | 32 | +| Parameter 1 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.AddSpecialInterface | parameter | 32 | +| Parameter 1 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.Insert | parameter | 32 | +| Parameter 1 of System.RuntimeType.SplitName | parameter | 32 | +| Parameter 1 of System.RuntimeTypeHandle.CopyRuntimeTypeHandles | parameter | 32 | +| Parameter 1 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | +| Parameter 1 of System.SByte.TryCreate | parameter | 32 | +| Parameter 1 of System.SByte.TryParse | parameter | 32 | +| Parameter 1 of System.Security.SecureString.AcquireSpan | parameter | 32 | +| Parameter 1 of System.Single.TryCreate | parameter | 32 | +| Parameter 1 of System.Single.TryParse | parameter | 32 | +| Parameter 1 of System.Span..ctor | parameter | 32 | +| Parameter 1 of System.SpanHelpers.SequenceEqual | parameter | 32 | +| Parameter 1 of System.String.Create | parameter | 32 | +| Parameter 1 of System.String.IndexOfNewlineChar | parameter | 32 | +| Parameter 1 of System.String.MakeSeparatorListVectorized | parameter | 32 | +| Parameter 1 of System.String.TryGetTrailByte | parameter | 32 | +| Parameter 1 of System.StringComparer.IsWellKnownCultureAwareComparer | parameter | 32 | +| Parameter 1 of System.StringComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | +| Parameter 1 of System.StringComparer.IsWellKnownOrdinalComparer | parameter | 32 | +| Parameter 1 of System.StringComparer.IsWellKnownOrdinalComparerCore | parameter | 32 | +| Parameter 1 of System.StubHelpers.HandleMarshaler.ConvertSafeHandleToNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ClearNativeContents | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertContentsToManaged | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertContentsToNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertSpaceToManaged | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdFixedArrayMarshaler.ConvertSpaceToNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ClearNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ClearNativeContents | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToManaged | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertSpaceToManaged | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdNativeArrayMarshaler.ConvertSpaceToNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ClearManaged | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ClearNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ConvertContentsToManaged | parameter | 32 | +| Parameter 1 of System.StubHelpers.MngdRefCustomMarshaler.ConvertContentsToNative | parameter | 32 | +| Parameter 1 of System.StubHelpers.StubHelpers.GetDelegateTarget | parameter | 32 | +| Parameter 1 of System.StubHelpers.StubHelpers.SafeHandleAddRef | parameter | 32 | +| Parameter 1 of System.TermInfo.Database.TryOpen | parameter | 32 | +| Parameter 1 of System.TermInfo.ParameterizedStrings.EvaluateInternal | parameter | 32 | +| Parameter 1 of System.TermInfo.ParameterizedStrings.GetDynamicOrStaticVariables | parameter | 32 | +| Parameter 1 of System.Text.Rune.DecodeFromUtf8 | parameter | 32 | +| Parameter 1 of System.Text.Rune.DecodeFromUtf16 | parameter | 32 | +| Parameter 1 of System.Text.Rune.DecodeLastFromUtf8 | parameter | 32 | +| Parameter 1 of System.Text.Rune.DecodeLastFromUtf16 | parameter | 32 | +| Parameter 1 of System.Text.Rune.TryCreate | parameter | 32 | +| Parameter 1 of System.Text.StringBuilder.Append | parameter | 32 | +| Parameter 1 of System.Text.StringBuilder.AppendLine | parameter | 32 | +| Parameter 1 of System.Text.StringBuilder.ChunkEnumerator.ManyChunkInfo.MoveNext | parameter | 32 | +| Parameter 1 of System.Text.StringBuilder.ReplaceInPlaceAtChunk | parameter | 32 | +| Parameter 1 of System.Text.UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar | parameter | 32 | +| Parameter 1 of System.Threading.EventWaitHandle.OpenExistingWorker | parameter | 32 | +| Parameter 1 of System.Threading.EventWaitHandle.TryOpenExisting | parameter | 32 | +| Parameter 1 of System.Threading.LazyInitializer.EnsureInitialized | parameter | 32 | +| Parameter 1 of System.Threading.LazyInitializer.EnsureInitializedCore | parameter | 32 | +| Parameter 1 of System.Threading.Monitor.Enter | parameter | 32 | +| Parameter 1 of System.Threading.Monitor.ReliableEnter | parameter | 32 | +| Parameter 1 of System.Threading.Monitor.TryEnter | parameter | 32 | +| Parameter 1 of System.Threading.Mutex.OpenExistingWorker | parameter | 32 | +| Parameter 1 of System.Threading.Mutex.TryOpenExisting | parameter | 32 | +| Parameter 1 of System.Threading.OverlappedData.CheckVMForIOPacket | parameter | 32 | +| Parameter 1 of System.Threading.ReaderWriterLockSlim.LazyCreateEvent | parameter | 32 | +| Parameter 1 of System.Threading.Semaphore.OpenExistingWorker | parameter | 32 | +| Parameter 1 of System.Threading.Semaphore.TryOpenExisting | parameter | 32 | +| Parameter 1 of System.Threading.SpinLock.Enter | parameter | 32 | +| Parameter 1 of System.Threading.SpinLock.TryEnter | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.IProducerConsumerQueue.TryDequeue | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.MultiProducerMultiConsumerQueue.TryDequeue | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.SingleProducerSingleConsumerQueue.TryDequeue | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.SingleProducerSingleConsumerQueue.TryDequeueSlow | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.Task.AddToList | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.Task.CreationOptionsFromContinuationOptions | parameter | 32 | +| Parameter 1 of System.Threading.Tasks.Task.ExecuteWithThreadLocal | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetAvailableThreads | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetAvailableThreadsNative | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetMaxThreads | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetMaxThreadsNative | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetMinThreads | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetMinThreadsNative | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPool.GetNextConfigUInt32Value | parameter | 32 | +| Parameter 1 of System.Threading.ThreadPoolWorkQueue.WorkStealingQueue.TrySteal | parameter | 32 | +| Parameter 1 of System.TimeOnly.TryParse | parameter | 32 | +| Parameter 1 of System.TimeSpan.TryParse | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.AdjustmentRule.AdjustDaylightDeltaToExpectedRange | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.GetAlternativeId | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.NormalizeAdjustmentRuleOffset | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.StringSerializer.SerializeSubstitute | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.StringSerializer.SerializeTransitionTime | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParseJulianDay | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParseMDateRule | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixDate | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixDateTime | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixName | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixOffset | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixString | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParsePosixTime | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TryConvertIanaIdToWindowsId | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TryConvertWindowsIdToIanaId | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TryGetLocalTzFile | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachineCore | parameter | 32 | +| Parameter 1 of System.TimeZoneInfo.TryLoadTzFile | parameter | 32 | +| Parameter 1 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 1 of System.Type.GetEnumData | parameter | 32 | +| Parameter 1 of System.UInt16.TryCreate | parameter | 32 | +| Parameter 1 of System.UInt16.TryParse | parameter | 32 | +| Parameter 1 of System.UInt32.TryCreate | parameter | 32 | +| Parameter 1 of System.UInt32.TryParse | parameter | 32 | +| Parameter 1 of System.UInt64.TryCreate | parameter | 32 | +| Parameter 1 of System.UInt64.TryParse | parameter | 32 | +| Parameter 1 of System.UIntPtr.TryCreate | parameter | 32 | +| Parameter 1 of System.UIntPtr.TryParse | parameter | 32 | +| Parameter 1 of System.Version.TryParse | parameter | 32 | +| Parameter 1 of System.WeakReference.TryGetTarget | parameter | 32 | +| Parameter 1 of System.__DTString.GetRegularToken | parameter | 32 | +| Parameter 2 of Internal.Runtime.InteropServices.IClassFactory.CreateInstance | parameter | 32 | +| Parameter 2 of Interop.Globalization.GetJapaneseEraStartDate | parameter | 32 | +| Parameter 2 of Interop.Globalization.GetLocaleInfoGroupingSizes | parameter | 32 | +| Parameter 2 of Interop.Globalization.GetLocaleInfoInt | parameter | 32 | +| Parameter 2 of Interop.Kernel32.ReleaseSemaphore | parameter | 32 | +| Parameter 2 of System.Boolean.TryFormat | parameter | 32 | +| Parameter 2 of System.Buffers.Text.ParserHelpers.TryParseThrowFormatException | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormat | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatDateTimeL | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatDateTimeR | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatDecimalE | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatDecimalF | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatDecimalG | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatFloatingPoint | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatInt64Default | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatInt64MultipleDigits | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatUInt32SingleDigit | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatUInt64 | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatUInt64Default | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Formatter.TryFormatUInt64MultipleDigits | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TimeSpanSplitter.ParseComponent | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParse | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseByteD | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseByteN | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseByteX | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeG | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetDefault | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetR | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseGuidCore | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseGuidN | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt16D | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt16N | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt32D | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt32N | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt64D | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseInt64N | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseNormalAsFloatingPoint | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseNumber | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseSByteD | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseSByteN | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanBigG | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanC | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanFraction | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseTimeSpanLittleG | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt16D | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt16N | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt16X | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt32D | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt32N | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt32X | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt64D | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt64N | parameter | 32 | +| Parameter 2 of System.Buffers.Text.Utf8Parser.TryParseUInt64X | parameter | 32 | +| Parameter 2 of System.Byte.TryFormat | parameter | 32 | +| Parameter 2 of System.Byte.TryParse | parameter | 32 | +| Parameter 2 of System.Char.TryFormat | parameter | 32 | +| Parameter 2 of System.Char.TryParse | parameter | 32 | +| Parameter 2 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | +| Parameter 2 of System.Collections.DictionaryEntry.Deconstruct | parameter | 32 | +| Parameter 2 of System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | parameter | 32 | +| Parameter 2 of System.Collections.Generic.Dictionary.Remove | parameter | 32 | +| Parameter 2 of System.Collections.Generic.Dictionary.TryGetValue | parameter | 32 | +| Parameter 2 of System.Collections.Generic.HashSet.AddIfNotPresent | parameter | 32 | +| Parameter 2 of System.Collections.Generic.HashSet.TryGetValue | parameter | 32 | +| Parameter 2 of System.Collections.Generic.IDictionary.TryGetValue | parameter | 32 | +| Parameter 2 of System.Collections.Generic.IReadOnlyDictionary.TryGetValue | parameter | 32 | +| Parameter 2 of System.Collections.Generic.KeyValuePair.Deconstruct | parameter | 32 | +| Parameter 2 of System.ComponentModel.DefaultValueAttribute.ctor>g__TryConvertFromInvariantString\|2_0 | parameter | 32 | +| Parameter 2 of System.ConsolePal.g__BufferUntil\|83_1 | parameter | 32 | +| Parameter 2 of System.Convert.CopyToTempBufferWithoutWhiteSpace | parameter | 32 | +| Parameter 2 of System.Convert.TryDecodeFromUtf16 | parameter | 32 | +| Parameter 2 of System.Convert.TryFromBase64Chars | parameter | 32 | +| Parameter 2 of System.Convert.TryFromBase64String | parameter | 32 | +| Parameter 2 of System.Convert.TryToBase64Chars | parameter | 32 | +| Parameter 2 of System.CultureAwareComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | +| Parameter 2 of System.CurrentSystemTimeZone.GetUtcOffsetFromUniversalTime | parameter | 32 | +| Parameter 2 of System.DateOnly.TryFormat | parameter | 32 | +| Parameter 2 of System.DateOnly.TryParse | parameter | 32 | +| Parameter 2 of System.DateOnly.TryParseExact | parameter | 32 | +| Parameter 2 of System.DateTime.GetDate | parameter | 32 | +| Parameter 2 of System.DateTime.GetTime | parameter | 32 | +| Parameter 2 of System.DateTime.GetTimePrecise | parameter | 32 | +| Parameter 2 of System.DateTime.TryAddTicks | parameter | 32 | +| Parameter 2 of System.DateTime.TryFormat | parameter | 32 | +| Parameter 2 of System.DateTime.TryParse | parameter | 32 | +| Parameter 2 of System.DateTimeFormat.ExpandPredefinedFormat | parameter | 32 | +| Parameter 2 of System.DateTimeFormat.TryFormat | parameter | 32 | +| Parameter 2 of System.DateTimeOffset.TryFormat | parameter | 32 | +| Parameter 2 of System.DateTimeOffset.TryParse | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ConfigureFormatR | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ExpandPredefinedFormat | parameter | 32 | +| Parameter 2 of System.DateTimeParse.GetDayOfMN | parameter | 32 | +| Parameter 2 of System.DateTimeParse.GetDayOfNM | parameter | 32 | +| Parameter 2 of System.DateTimeParse.GetDayOfNN | parameter | 32 | +| Parameter 2 of System.DateTimeParse.Lex | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchAbbreviatedDayName | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchAbbreviatedMonthName | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchAbbreviatedTimeMark | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchDayName | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchEraName | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchHebrewDigits | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchMonthName | parameter | 32 | +| Parameter 2 of System.DateTimeParse.MatchTimeMark | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ParseByFormat | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ParseDigits | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ParseFormatR | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ParseFractionExact | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ParseTimeZoneOffset | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ProcessDateTimeSuffix | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ProcessHebrewTerminalState | parameter | 32 | +| Parameter 2 of System.DateTimeParse.ProcessTerminalState | parameter | 32 | +| Parameter 2 of System.DateTimeParse.TryAdjustYear | parameter | 32 | +| Parameter 2 of System.Decimal.DecCalc.DivByConst | parameter | 32 | +| Parameter 2 of System.Decimal.DecCalc.UInt64x64To128 | parameter | 32 | +| Parameter 2 of System.Decimal.DecCalc.Unscale | parameter | 32 | +| Parameter 2 of System.Decimal.TryFormat | parameter | 32 | +| Parameter 2 of System.Decimal.TryGetBits | parameter | 32 | +| Parameter 2 of System.Decimal.TryParse | parameter | 32 | +| Parameter 2 of System.Diagnostics.Debug.Assert | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.ActivityTracker.ActivityInfo.CreateActivityPathGuid | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadata | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForProperty | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForTypeV2 | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataV2 | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventParameterInfo.GetMetadataLengthForNamedTypeV2 | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventPayload.TryGetValue | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventPipeEventProvider.EventWriteTransfer | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventPipeMetadataGenerator.WriteToBuffer | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventProvider.GetDataFromController | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventProvider.GetSessionInfo | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventProvider.GetSessionInfoCallback | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteEventRaw | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteImpl | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteMultiMerge | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteMultiMergeInner | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.EventSource.WriteToAllListeners | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.IEventProvider.EventWriteTransfer | parameter | 32 | +| Parameter 2 of System.Diagnostics.Tracing.NoOpEventProvider.EventWriteTransfer | parameter | 32 | +| Parameter 2 of System.Double.TryFormat | parameter | 32 | +| Parameter 2 of System.Double.TryParse | parameter | 32 | +| Parameter 2 of System.Enum.TryParse | parameter | 32 | +| Parameter 2 of System.Exception.GetStackTracesDeepCopy | parameter | 32 | +| Parameter 2 of System.Globalization.CalendarData.CountOccurrences | parameter | 32 | +| Parameter 2 of System.Globalization.CalendarData.NormalizeDayOfWeek | parameter | 32 | +| Parameter 2 of System.Globalization.CharUnicodeInfo.GetUnicodeCategoryInternal | parameter | 32 | +| Parameter 2 of System.Globalization.CultureData.GetIndexOfNextTokenAfterSeconds | parameter | 32 | +| Parameter 2 of System.Globalization.DateTimeFormatInfo.Tokenize | parameter | 32 | +| Parameter 2 of System.Globalization.DateTimeFormatInfo.TryParseHebrewNumber | parameter | 32 | +| Parameter 2 of System.Globalization.DateTimeFormatInfo.YearMonthAdjustment | parameter | 32 | +| Parameter 2 of System.Globalization.EastAsianLunisolarCalendar.TimeToLunar | parameter | 32 | +| Parameter 2 of System.Globalization.GlobalizationMode.TryGetStringValue | parameter | 32 | +| Parameter 2 of System.Globalization.InvariantModeCasing.CompareStringIgnoreCase | parameter | 32 | +| Parameter 2 of System.Globalization.Ordinal.CompareStringIgnoreCase | parameter | 32 | +| Parameter 2 of System.Globalization.Ordinal.CompareStringIgnoreCaseNonAscii | parameter | 32 | +| Parameter 2 of System.Globalization.OrdinalCasing.CompareStringIgnoreCase | parameter | 32 | +| Parameter 2 of System.Globalization.SurrogateCasing.ToLower | parameter | 32 | +| Parameter 2 of System.Globalization.SurrogateCasing.ToUpper | parameter | 32 | +| Parameter 2 of System.Globalization.TextInfo.AddTitlecaseLetter | parameter | 32 | +| Parameter 2 of System.Globalization.TextInfo.ChangeCaseCommon | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanFormat.TryFormat | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminalState | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_D | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_DHMSF | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_HM | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_HMS_F_D | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.ProcessTerminal_HM_S_D | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.StringParser.ParseInt | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.StringParser.ParseTime | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.StringParser.TryParse | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.AddNum | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.AddSep | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.TimeSpanRawInfo.ProcessToken | parameter | 32 | +| Parameter 2 of System.Globalization.TimeSpanParse.TryParse | parameter | 32 | +| Parameter 2 of System.Globalization.UmAlQuraCalendar.ConvertGregorianToHijri | parameter | 32 | +| Parameter 2 of System.Guid.DecodeByte | parameter | 32 | +| Parameter 2 of System.Guid.TryFormat | parameter | 32 | +| Parameter 2 of System.Guid.TryParse | parameter | 32 | +| Parameter 2 of System.Guid.TryParseExact | parameter | 32 | +| Parameter 2 of System.Guid.TryParseHex | parameter | 32 | +| Parameter 2 of System.Half.TryFormat | parameter | 32 | +| Parameter 2 of System.Half.TryParse | parameter | 32 | +| Parameter 2 of System.HashCode.Initialize | parameter | 32 | +| Parameter 2 of System.HexConverter.TryDecodeFromUtf16 | parameter | 32 | +| Parameter 2 of System.IO.BufferedStream.WriteToBuffer | parameter | 32 | +| Parameter 2 of System.IO.FileStatus.VerifyStatCall | parameter | 32 | +| Parameter 2 of System.IO.FileSystemInfo.Create | parameter | 32 | +| Parameter 2 of System.IO.PathInternal.RemoveRelativeSegments | parameter | 32 | +| Parameter 2 of System.IO.PersistedFiles.TryGetHomeDirectoryFromPasswd | parameter | 32 | +| Parameter 2 of System.IO.StdInReader.GetKeyFromCharValue | parameter | 32 | +| Parameter 2 of System.IO.StdInReader.MapBufferToConsoleKey | parameter | 32 | +| Parameter 2 of System.IO.StreamReader.ReadBuffer | parameter | 32 | +| Parameter 2 of System.IO.UnmanagedMemoryAccessor.Read | parameter | 32 | +| Parameter 2 of System.IO.UnmanagedMemoryAccessor.Write | parameter | 32 | +| Parameter 2 of System.IParseable.TryParse | parameter | 32 | +| Parameter 2 of System.ISpanFormattable.TryFormat | parameter | 32 | +| Parameter 2 of System.ISpanParseable.TryParse | parameter | 32 | +| Parameter 2 of System.Int16.TryFormat | parameter | 32 | +| Parameter 2 of System.Int16.TryParse | parameter | 32 | +| Parameter 2 of System.Int32.TryFormat | parameter | 32 | +| Parameter 2 of System.Int32.TryParse | parameter | 32 | +| Parameter 2 of System.Int64.TryFormat | parameter | 32 | +| Parameter 2 of System.Int64.TryParse | parameter | 32 | +| Parameter 2 of System.IntPtr.TryFormat | parameter | 32 | +| Parameter 2 of System.IntPtr.TryParse | parameter | 32 | +| Parameter 2 of System.Math.g__SoftwareFallback\|47_0 | parameter | 32 | +| Parameter 2 of System.Math.BigMul | parameter | 32 | +| Parameter 2 of System.Math.DivRem | parameter | 32 | +| Parameter 2 of System.MemoryExtensions.Overlaps | parameter | 32 | +| Parameter 2 of System.MemoryExtensions.TryWrite | parameter | 32 | +| Parameter 2 of System.ModuleHandle.GetPEKind | parameter | 32 | +| Parameter 2 of System.Net.WebUtility.ConvertSmpToUtf16 | parameter | 32 | +| Parameter 2 of System.Number.BigInteger.Add | parameter | 32 | +| Parameter 2 of System.Number.BigInteger.AddDivisor | parameter | 32 | +| Parameter 2 of System.Number.BigInteger.DivRem | parameter | 32 | +| Parameter 2 of System.Number.BigInteger.Multiply | parameter | 32 | +| Parameter 2 of System.Number.BigInteger.SubtractDivisor | parameter | 32 | +| Parameter 2 of System.Number.DiyFp.CreateAndGetBoundaries | parameter | 32 | +| Parameter 2 of System.Number.DiyFp.GetBoundaries | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.BiggestPowerTen | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.GetCachedPowerForBinaryExponentRange | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.TryRunDouble | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.TryRunHalf | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.TryRunShortest | parameter | 32 | +| Parameter 2 of System.Number.Grisu3.TryRunSingle | parameter | 32 | +| Parameter 2 of System.Number.TryCopyTo | parameter | 32 | +| Parameter 2 of System.Number.TryParseUInt32HexNumberStyle | parameter | 32 | +| Parameter 2 of System.Number.TryParseUInt64HexNumberStyle | parameter | 32 | +| Parameter 2 of System.Number.TryStringToNumber | parameter | 32 | +| Parameter 2 of System.Numerics.Matrix4x4.Decompose | parameter | 32 | +| Parameter 2 of System.Numerics.Vector.Widen | parameter | 32 | +| Parameter 2 of System.ParseNumbers.GrabInts | parameter | 32 | +| Parameter 2 of System.ParseNumbers.GrabLongs | parameter | 32 | +| Parameter 2 of System.ParseNumbers.IsDigit | parameter | 32 | +| Parameter 2 of System.ReadOnlyMemory.GetObjectStartLength | parameter | 32 | +| Parameter 2 of System.Reflection.AssemblyName.EscapeAsciiChar | parameter | 32 | +| Parameter 2 of System.Reflection.CustomAttribute.AttributeUsageCheck | parameter | 32 | +| Parameter 2 of System.Reflection.CustomAttribute.ParseAttributeUsageAttribute | parameter | 32 | +| Parameter 2 of System.Reflection.CustomAttribute._ParseAttributeUsageAttribute | parameter | 32 | +| Parameter 2 of System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments | parameter | 32 | +| Parameter 2 of System.Reflection.Emit.AssemblyBuilder.InternalDefineDynamicAssembly | parameter | 32 | +| Parameter 2 of System.Reflection.Emit.DynamicResolver.GetCodeInfo | parameter | 32 | +| Parameter 2 of System.Reflection.Emit.DynamicResolver.ResolveToken | parameter | 32 | +| Parameter 2 of System.Reflection.Emit.ModuleBuilder.GetPEKind | parameter | 32 | +| Parameter 2 of System.Reflection.Metadata.AssemblyExtensions.InternalTryGetRawMetadata | parameter | 32 | +| Parameter 2 of System.Reflection.Metadata.AssemblyExtensions.TryGetRawMetadata | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.EnumCustomAttributes | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.EnumEvents | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.EnumFields | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.EnumNestedTypes | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.EnumParams | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.EnumProperties | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetClassLayout | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetCustomAttributeProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetDefaultValue | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetEventProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetFieldDefProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetGenericParamProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetPInvokeMap | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetParamDefProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport.GetPropertyProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetClassLayout | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetCustomAttributeProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetDefaultValue | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetFieldDefProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetFieldMarshal | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetGenericParamProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetMemberRefProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetPInvokeMap | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetParamDefProps | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetParentToken | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetSigOfFieldDef | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetSigOfMethodDef | parameter | 32 | +| Parameter 2 of System.Reflection.MetadataImport._GetSignatureFromToken | parameter | 32 | +| Parameter 2 of System.Reflection.Module.GetPEKind | parameter | 32 | +| Parameter 2 of System.Reflection.NullabilityInfoContext.ParseNullableState | parameter | 32 | +| Parameter 2 of System.Reflection.PseudoCustomAttribute.GetCustomAttributes | parameter | 32 | +| Parameter 2 of System.Reflection.RuntimeAssembly.GetResource | parameter | 32 | +| Parameter 2 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | +| Parameter 2 of System.Reflection.RuntimeAssembly.InternalLoad | parameter | 32 | +| Parameter 2 of System.Reflection.RuntimeModule.GetPEKind | parameter | 32 | +| Parameter 2 of System.Resolver.GetCodeInfo | parameter | 32 | +| Parameter 2 of System.Resolver.ResolveToken | parameter | 32 | +| Parameter 2 of System.Resources.ResourceManager.AddResourceSet | parameter | 32 | +| Parameter 2 of System.Resources.ResourceReader.AllocateStringForNameIndex | parameter | 32 | +| Parameter 2 of System.Resources.ResourceReader.GetResourceData | parameter | 32 | +| Parameter 2 of System.Resources.ResourceReader.LoadObject | parameter | 32 | +| Parameter 2 of System.Resources.ResourceReader.LoadObjectV2 | parameter | 32 | +| Parameter 2 of System.Resources.ResourceReader._LoadObjectV2 | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.AsyncVoidMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.FindEntry | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.TryGetEntry | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.TryGetValueWorker | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.ConditionalWeakTable.TryGetValue | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.ICastable.IsInstanceOfInterface | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.ICastableHelpers.IsInstanceOfInterface | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.AwaitUnsafeOnCompleted | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrAddDefault | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IBindCtx.GetObjectParam | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IConnectionPoint.Advise | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IConnectionPointContainer.FindConnectionPoint | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IMoniker.CommonPrefixWith | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IMoniker.Enum | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IMoniker.RelativePathTo | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.GetObject | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.GetTimeOfLastChange | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.IRunningObjectTable.NoteChangeTime | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.CreateInstance | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetContainingTypeLib | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetCustData | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2 | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncCustData | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncDesc | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetImplTypeCustData | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetImplTypeFlags | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetMops | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetRefTypeInfo | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetRefTypeOfImplType | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarCustData | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarDesc | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarIndexOfMemId | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.CreateInstance | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetContainingTypeLib | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetFuncDesc | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetImplTypeFlags | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetMops | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetRefTypeInfo | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetRefTypeOfImplType | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetVarDesc | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetCustData | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2 | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetLibStatistics | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfo | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfoOfGuid | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetTypeInfoType | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfo | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfoOfGuid | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetTypeInfoType | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComWrappers.CallICustomQueryInterface | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ComWrappers.GetIUnknownImplInternal | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.ICustomQueryInterface.GetInterface | parameter | 32 | +| 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.NativeLibrary.TryGetExport | parameter | 32 | +| Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElement | parameter | 32 | +| Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElementNoThrow | parameter | 32 | +| Parameter 2 of System.RuntimeType.FilterHelper | parameter | 32 | +| Parameter 2 of System.RuntimeType.SplitName | parameter | 32 | +| Parameter 2 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | +| Parameter 2 of System.SByte.TryFormat | parameter | 32 | +| Parameter 2 of System.SByte.TryParse | parameter | 32 | +| Parameter 2 of System.Security.SecurityElement.GetUnescapeSequence | parameter | 32 | +| Parameter 2 of System.Single.TryFormat | parameter | 32 | +| Parameter 2 of System.Single.TryParse | parameter | 32 | +| Parameter 2 of System.SpanHelpers.IndexOf | parameter | 32 | +| Parameter 2 of System.SpanHelpers.IndexOfAny | parameter | 32 | +| Parameter 2 of System.SpanHelpers.LastIndexOf | parameter | 32 | +| Parameter 2 of System.SpanHelpers.LastIndexOfAny | parameter | 32 | +| Parameter 2 of System.SpanHelpers.SequenceCompareTo | parameter | 32 | +| Parameter 2 of System.String.Create | parameter | 32 | +| Parameter 2 of System.String.MakeSeparatorList | parameter | 32 | +| Parameter 2 of System.StringComparer.IsWellKnownCultureAwareComparer | parameter | 32 | +| Parameter 2 of System.StringComparer.IsWellKnownCultureAwareComparerCore | parameter | 32 | +| Parameter 2 of System.StubHelpers.StubHelpers.FmtClassUpdateNativeInternal | parameter | 32 | +| Parameter 2 of System.TermInfo.ParameterizedStrings.GetDynamicOrStaticVariables | parameter | 32 | +| Parameter 2 of System.Text.ASCIIEncoding.DecodeFirstRune | parameter | 32 | +| Parameter 2 of System.Text.ASCIIEncoding.TryGetByteCount | parameter | 32 | +| Parameter 2 of System.Text.DecoderFallbackBuffer.TryDrainRemainingDataForGetChars | parameter | 32 | +| Parameter 2 of System.Text.DecoderNLS.DrainLeftoverDataForGetCharCount | parameter | 32 | +| Parameter 2 of System.Text.EncoderFallbackBuffer.InternalFallback | parameter | 32 | +| Parameter 2 of System.Text.EncoderFallbackBuffer.InternalFallbackGetByteCount | parameter | 32 | +| Parameter 2 of System.Text.EncoderFallbackBuffer.TryDrainRemainingDataForGetBytes | parameter | 32 | +| Parameter 2 of System.Text.EncoderNLS.DrainLeftoverDataForGetByteCount | parameter | 32 | +| Parameter 2 of System.Text.Encoding.DecodeFirstRune | parameter | 32 | +| Parameter 2 of System.Text.Encoding.TryGetByteCount | parameter | 32 | +| Parameter 2 of System.Text.Latin1Encoding.DecodeFirstRune | parameter | 32 | +| Parameter 2 of System.Text.Latin1Encoding.TryGetByteCount | parameter | 32 | +| Parameter 2 of System.Text.Rune.DecodeFromUtf8 | parameter | 32 | +| Parameter 2 of System.Text.Rune.DecodeFromUtf16 | parameter | 32 | +| Parameter 2 of System.Text.Rune.DecodeLastFromUtf8 | parameter | 32 | +| Parameter 2 of System.Text.Rune.DecodeLastFromUtf16 | parameter | 32 | +| Parameter 2 of System.Text.Rune.TryCreate | parameter | 32 | +| Parameter 2 of System.Text.Rune.TryEncodeToUtf8 | parameter | 32 | +| Parameter 2 of System.Text.Rune.TryEncodeToUtf16 | parameter | 32 | +| Parameter 2 of System.Text.Rune.TryFormat | parameter | 32 | +| Parameter 2 of System.Text.Rune.TryGetRuneAt | parameter | 32 | +| Parameter 2 of System.Text.StringBuilder.Append | parameter | 32 | +| Parameter 2 of System.Text.StringBuilder.AppendLine | parameter | 32 | +| Parameter 2 of System.Text.StringBuilder.ReplaceInPlaceAtChunk | parameter | 32 | +| Parameter 2 of System.Text.UTF8Encoding.DecodeFirstRune | parameter | 32 | +| Parameter 2 of System.Text.UTF8Encoding.TryGetByteCount | parameter | 32 | +| Parameter 2 of System.Text.Unicode.TextSegmentationUtility.DecodeFirstRune.Invoke | parameter | 32 | +| Parameter 2 of System.Text.Unicode.Utf8.FromUtf16 | parameter | 32 | +| Parameter 2 of System.Text.Unicode.Utf8.ToUtf16 | parameter | 32 | +| Parameter 2 of System.Text.Unicode.Utf8Utility.GetPointerToFirstInvalidByte | parameter | 32 | +| Parameter 2 of System.Text.Unicode.Utf16Utility.GetPointerToFirstInvalidChar | parameter | 32 | +| Parameter 2 of System.Text.UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar | parameter | 32 | +| Parameter 2 of System.Text.ValueStringBuilder.TryCopyTo | parameter | 32 | +| Parameter 2 of System.Threading.AsyncLocalValueMap.EmptyAsyncLocalValueMap.TryGetValue | parameter | 32 | +| Parameter 2 of System.Threading.AsyncLocalValueMap.MultiElementAsyncLocalValueMap.TryGetValue | parameter | 32 | +| Parameter 2 of System.Threading.AsyncLocalValueMap.OneElementAsyncLocalValueMap.TryGetValue | parameter | 32 | +| Parameter 2 of System.Threading.AsyncLocalValueMap.ThreeElementAsyncLocalValueMap.TryGetValue | parameter | 32 | +| Parameter 2 of System.Threading.AsyncLocalValueMap.TwoElementAsyncLocalValueMap.TryGetValue | parameter | 32 | +| Parameter 2 of System.Threading.ExecutionContext.RunForThreadPoolUnsafe | parameter | 32 | +| Parameter 2 of System.Threading.IAsyncLocalValueMap.TryGetValue | parameter | 32 | +| Parameter 2 of System.Threading.LazyInitializer.EnsureInitialized | parameter | 32 | +| Parameter 2 of System.Threading.LazyInitializer.EnsureInitializedCore | parameter | 32 | +| Parameter 2 of System.Threading.Monitor.ReliableEnterTimeout | parameter | 32 | +| Parameter 2 of System.Threading.Monitor.TryEnter | parameter | 32 | +| Parameter 2 of System.Threading.OverlappedData.CheckVMForIOPacket | parameter | 32 | +| Parameter 2 of System.Threading.PortableThreadPool.PerformBlockingAdjustment | parameter | 32 | +| Parameter 2 of System.Threading.ReaderWriterLockSlim.WaitOnEvent | parameter | 32 | +| Parameter 2 of System.Threading.SpinLock.ContinueTryEnter | parameter | 32 | +| Parameter 2 of System.Threading.SpinLock.TryEnter | parameter | 32 | +| Parameter 2 of System.Threading.Tasks.SingleProducerSingleConsumerQueue.EnqueueSlow | parameter | 32 | +| Parameter 2 of System.Threading.Tasks.SingleProducerSingleConsumerQueue.TryDequeueSlow | parameter | 32 | +| Parameter 2 of System.Threading.Tasks.Task.CreationOptionsFromContinuationOptions | parameter | 32 | +| Parameter 2 of System.Threading.ThreadPool.GetNextConfigUInt32Value | parameter | 32 | +| Parameter 2 of System.Threading.ThreadPoolWorkQueue.Dequeue | parameter | 32 | +| Parameter 2 of System.TimeOnly.Add | parameter | 32 | +| Parameter 2 of System.TimeOnly.AddHours | parameter | 32 | +| Parameter 2 of System.TimeOnly.AddMinutes | parameter | 32 | +| Parameter 2 of System.TimeOnly.AddTicks | parameter | 32 | +| Parameter 2 of System.TimeOnly.TryFormat | parameter | 32 | +| Parameter 2 of System.TimeOnly.TryParse | parameter | 32 | +| Parameter 2 of System.TimeOnly.TryParseExact | parameter | 32 | +| Parameter 2 of System.TimeSpan.TryFormat | parameter | 32 | +| Parameter 2 of System.TimeSpan.TryParse | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.ConvertUtcToTimeZone | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.GetAdjustmentRuleForAmbiguousOffsets | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.GetAdjustmentRuleForTime | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.GetUtcOffsetFromUtc | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TZif_ParseJulianDay | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TZif_ParseMDateRule | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TZif_ParsePosixDateTime | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryConvertIanaIdToWindowsId | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryConvertWindowsIdToIanaId | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryGetTimeZone | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachineCore | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryGetTimeZoneUsingId | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryLoadTzFile | parameter | 32 | +| Parameter 2 of System.TimeZoneInfo.TryPopulateTimeZoneDisplayNamesFromGlobalizationData | parameter | 32 | +| Parameter 2 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 2 of System.Type.GetEnumData | parameter | 32 | +| Parameter 2 of System.UInt16.TryFormat | parameter | 32 | +| Parameter 2 of System.UInt16.TryParse | parameter | 32 | +| Parameter 2 of System.UInt32.TryFormat | parameter | 32 | +| Parameter 2 of System.UInt32.TryParse | parameter | 32 | +| Parameter 2 of System.UInt64.TryFormat | parameter | 32 | +| Parameter 2 of System.UInt64.TryParse | parameter | 32 | +| Parameter 2 of System.UIntPtr.TryFormat | parameter | 32 | +| Parameter 2 of System.UIntPtr.TryParse | parameter | 32 | +| Parameter 2 of System.Version.TryFormat | parameter | 32 | +| Parameter 2 of System.__DTString.GetRegularToken | parameter | 32 | +| Parameter 2 of System.__DTString.GetSeparatorToken | parameter | 32 | +| Parameter 2 of System.__DTString.MatchLongestWords | parameter | 32 | +| Parameter 3 of Internal.Runtime.InteropServices.IClassFactory.CreateInstance | parameter | 32 | +| Parameter 3 of Interop.Globalization.GetJapaneseEraStartDate | parameter | 32 | +| Parameter 3 of Interop.Globalization.GetLocaleInfoGroupingSizes | parameter | 32 | +| Parameter 3 of Interop.Sys.GetControlCharacters | parameter | 32 | +| Parameter 3 of Interop.Sys.Poll | parameter | 32 | +| Parameter 3 of Interop.Sys.ReadDirR | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Formatter.TryFormatDateTimeG | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Formatter.TryFormatDateTimeO | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Formatter.TryFormatInt64 | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Formatter.TryFormatInt64D | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Formatter.TryFormatInt64N | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Parser.TimeSpanSplitter.ParseComponent | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Parser.TimeSpanSplitter.TrySplitTimeSpan | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Parser.TryParseDateTimeG | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetO | parameter | 32 | +| Parameter 3 of System.Buffers.Text.Utf8Parser.TryParseDateTimeOffsetR | parameter | 32 | +| Parameter 3 of System.Byte.TryParse | parameter | 32 | +| Parameter 3 of System.Char.TryParse | parameter | 32 | +| Parameter 3 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | +| Parameter 3 of System.Collections.Hashtable.InitHash | parameter | 32 | +| Parameter 3 of System.ConsolePal.g__AppendToStdInReaderUntil\|83_2 | parameter | 32 | +| Parameter 3 of System.ConsolePal.g__BufferUntil\|83_1 | parameter | 32 | +| Parameter 3 of System.ConsolePal.TryGetSpecialConsoleKey | parameter | 32 | +| Parameter 3 of System.Convert.CopyToTempBufferWithoutWhiteSpace | parameter | 32 | +| Parameter 3 of System.Convert.TryDecodeFromUtf16 | parameter | 32 | +| Parameter 3 of System.DateOnly.TryParse | parameter | 32 | +| Parameter 3 of System.DateOnly.TryParseInternal | parameter | 32 | +| Parameter 3 of System.DateTime.GetDate | parameter | 32 | +| Parameter 3 of System.DateTime.GetTime | parameter | 32 | +| Parameter 3 of System.DateTime.GetTimePrecise | parameter | 32 | +| Parameter 3 of System.DateTime.TryParse | parameter | 32 | +| Parameter 3 of System.DateTimeFormat.TryFormatO | parameter | 32 | +| Parameter 3 of System.DateTimeFormat.TryFormatR | parameter | 32 | +| Parameter 3 of System.DateTimeOffset.TryParse | parameter | 32 | +| Parameter 3 of System.DateTimeParse.CheckNewValue | parameter | 32 | +| Parameter 3 of System.DateTimeParse.ExpandPredefinedFormat | parameter | 32 | +| Parameter 3 of System.DateTimeParse.Lex | parameter | 32 | +| Parameter 3 of System.DateTimeParse.MatchNumberDelegate.Invoke | parameter | 32 | +| Parameter 3 of System.DateTimeParse.Parse | parameter | 32 | +| Parameter 3 of System.DateTimeParse.ParseDigits | parameter | 32 | +| Parameter 3 of System.DateTimeParse.ParseISO8601 | parameter | 32 | +| Parameter 3 of System.DateTimeParse.ProcessHebrewTerminalState | parameter | 32 | +| Parameter 3 of System.DateTimeParse.ProcessTerminalState | parameter | 32 | +| Parameter 3 of System.DateTimeParse.TryParse | parameter | 32 | +| Parameter 3 of System.DateTimeParse.TryParseQuoteString | parameter | 32 | +| Parameter 3 of System.Decimal.DecCalc.DivByConst | parameter | 32 | +| Parameter 3 of System.Decimal.TryParse | parameter | 32 | +| Parameter 3 of System.DefaultBinder.BindToMethod | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventParameterInfo.GenerateMetadataForNamedTypeV2 | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventProvider.<>c.b__37_0 | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventProvider.EncodeObject | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventProvider.GetDataFromController | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventProvider.SessionInfoCallback.BeginInvoke | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventProvider.SessionInfoCallback.Invoke | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventSource.UpdateDescriptor | parameter | 32 | +| Parameter 3 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | +| Parameter 3 of System.Double.TryParse | parameter | 32 | +| Parameter 3 of System.Enum.TryParse | parameter | 32 | +| Parameter 3 of System.Globalization.CalendarData.EnumCalendarInfo | parameter | 32 | +| Parameter 3 of System.Globalization.CalendarData.EnumDatePatterns | parameter | 32 | +| Parameter 3 of System.Globalization.CalendarData.EnumEraNames | parameter | 32 | +| Parameter 3 of System.Globalization.CalendarData.EnumMonthNames | parameter | 32 | +| Parameter 3 of System.Globalization.CalendarData.GetCalendarInfo | parameter | 32 | +| Parameter 3 of System.Globalization.DateTimeFormatInfo.Tokenize | parameter | 32 | +| Parameter 3 of System.Globalization.DateTimeFormatInfoScanner.ScanRepeatChar | parameter | 32 | +| Parameter 3 of System.Globalization.EastAsianLunisolarCalendar.TimeToLunar | parameter | 32 | +| Parameter 3 of System.Globalization.SurrogateCasing.ToLower | parameter | 32 | +| Parameter 3 of System.Globalization.SurrogateCasing.ToUpper | parameter | 32 | +| Parameter 3 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | +| Parameter 3 of System.Globalization.TimeSpanParse.StringParser.ParseInt | parameter | 32 | +| Parameter 3 of System.Globalization.TimeSpanParse.TryParseByFormat | parameter | 32 | +| Parameter 3 of System.Globalization.TimeSpanParse.TryParseTimeSpan | parameter | 32 | +| Parameter 3 of System.Globalization.UmAlQuraCalendar.ConvertGregorianToHijri | parameter | 32 | +| Parameter 3 of System.Globalization.UmAlQuraCalendar.ConvertHijriToGregorian | parameter | 32 | +| Parameter 3 of System.Half.TryParse | parameter | 32 | +| Parameter 3 of System.HashCode.Initialize | parameter | 32 | +| Parameter 3 of System.INumber.TryParse | parameter | 32 | +| Parameter 3 of System.IO.BufferedStream.WriteToBuffer | parameter | 32 | +| Parameter 3 of System.IO.Path.TryJoin | parameter | 32 | +| Parameter 3 of System.IO.StdInReader.GetKeyFromCharValue | parameter | 32 | +| Parameter 3 of System.IO.StdInReader.MapBufferToConsoleKey | parameter | 32 | +| Parameter 3 of System.IO.Strategies.Net5CompatFileStreamStrategy.ReadAsyncInternal | parameter | 32 | +| Parameter 3 of System.Int16.TryParse | parameter | 32 | +| Parameter 3 of System.Int32.TryParse | parameter | 32 | +| Parameter 3 of System.Int64.TryParse | parameter | 32 | +| Parameter 3 of System.IntPtr.TryParse | parameter | 32 | +| Parameter 3 of System.MemoryExtensions.TryWrite | parameter | 32 | +| Parameter 3 of System.Number.AccumulateDecimalDigitsIntoBigInteger | parameter | 32 | +| Parameter 3 of System.Number.BigInteger.DivRem | parameter | 32 | +| Parameter 3 of System.Number.DiyFp.GetBoundaries | parameter | 32 | +| Parameter 3 of System.Number.Dragon4Double | parameter | 32 | +| Parameter 3 of System.Number.Dragon4Half | parameter | 32 | +| Parameter 3 of System.Number.Dragon4Single | parameter | 32 | +| Parameter 3 of System.Number.GetFloatingPointMaxDigitsAndPrecision | parameter | 32 | +| Parameter 3 of System.Number.Grisu3.TryDigitGenCounted | parameter | 32 | +| Parameter 3 of System.Number.Grisu3.TryRunCounted | parameter | 32 | +| Parameter 3 of System.Number.TryParseDecimal | parameter | 32 | +| Parameter 3 of System.Number.TryParseDouble | parameter | 32 | +| Parameter 3 of System.Number.TryParseHalf | parameter | 32 | +| Parameter 3 of System.Number.TryParseInt32 | parameter | 32 | +| Parameter 3 of System.Number.TryParseInt32IntegerStyle | parameter | 32 | +| Parameter 3 of System.Number.TryParseInt32Number | parameter | 32 | +| Parameter 3 of System.Number.TryParseInt64 | parameter | 32 | +| Parameter 3 of System.Number.TryParseInt64IntegerStyle | parameter | 32 | +| Parameter 3 of System.Number.TryParseInt64Number | parameter | 32 | +| Parameter 3 of System.Number.TryParseNumber | parameter | 32 | +| Parameter 3 of System.Number.TryParseSingle | parameter | 32 | +| Parameter 3 of System.Number.TryParseUInt32 | parameter | 32 | +| Parameter 3 of System.Number.TryParseUInt32IntegerStyle | parameter | 32 | +| Parameter 3 of System.Number.TryParseUInt32Number | parameter | 32 | +| Parameter 3 of System.Number.TryParseUInt64 | parameter | 32 | +| Parameter 3 of System.Number.TryParseUInt64IntegerStyle | parameter | 32 | +| Parameter 3 of System.Number.TryParseUInt64Number | parameter | 32 | +| Parameter 3 of System.Number.TryUInt32ToDecStr | parameter | 32 | +| Parameter 3 of System.Number.TryUInt64ToDecStr | parameter | 32 | +| Parameter 3 of System.Numerics.Matrix4x4.Decompose | parameter | 32 | +| Parameter 3 of System.ParseNumbers.StringToInt | parameter | 32 | +| Parameter 3 of System.ParseNumbers.StringToLong | parameter | 32 | +| Parameter 3 of System.Reflection.Binder.BindToMethod | parameter | 32 | +| Parameter 3 of System.Reflection.CustomAttribute.CreateCaObject | parameter | 32 | +| Parameter 3 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | +| Parameter 3 of System.Reflection.CustomAttribute.ParseAttributeUsageAttribute | parameter | 32 | +| Parameter 3 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | +| Parameter 3 of System.Reflection.CustomAttribute._ParseAttributeUsageAttribute | parameter | 32 | +| Parameter 3 of System.Reflection.CustomAttributeEncodedArgument.ParseAttributeArguments | parameter | 32 | +| Parameter 3 of System.Reflection.Emit.AssemblyBuilder..ctor | parameter | 32 | +| Parameter 3 of System.Reflection.Emit.DynamicResolver.GetCodeInfo | parameter | 32 | +| Parameter 3 of System.Reflection.Emit.DynamicResolver.ResolveToken | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.Enum | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetClassLayout | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetCustomAttributeProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetDefaultValue | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetEventProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetFieldOffset | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetPInvokeMap | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetParamDefProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport.GetPropertyProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._Enum | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetClassLayout | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetCustomAttributeProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetDefaultValue | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetEventProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetFieldOffset | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetParamDefProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetPropertyProps | parameter | 32 | +| Parameter 3 of System.Reflection.MetadataImport._GetUserString | parameter | 32 | +| Parameter 3 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | +| Parameter 3 of System.Reflection.RuntimeCustomAttributeData..ctor | parameter | 32 | +| Parameter 3 of System.Reflection.RuntimeParameterInfo.GetParameters | parameter | 32 | +| Parameter 3 of System.Resolver.GetCodeInfo | parameter | 32 | +| Parameter 3 of System.Resolver.ResolveToken | parameter | 32 | +| Parameter 3 of System.Resources.ResourceReader.GetResourceData | parameter | 32 | +| Parameter 3 of System.Resources.RuntimeResourceSet.ReadValue | parameter | 32 | +| Parameter 3 of System.Runtime.CompilerServices.ConditionalWeakTable.Container.TryGetEntry | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToObject | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToStorage | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.ComposeWith | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.GetDisplayName | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.GetTimeOfLastChange | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.IMoniker.Reduce | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeComp.BindType | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.AddressOfMember | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.CreateInstance | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2 | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncCustData | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetFuncIndexOfMemId | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetImplTypeCustData | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetParamCustData | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetVarCustData | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo.CreateInstance | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2 | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.ComWrappers.ComputeVtables | parameter | 32 | +| 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.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 | +| Parameter 3 of System.RuntimeType.FilterHelper | parameter | 32 | +| Parameter 3 of System.RuntimeType.GetType | parameter | 32 | +| Parameter 3 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateLiteralFields | parameter | 32 | +| Parameter 3 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateRtFields | parameter | 32 | +| Parameter 3 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | +| Parameter 3 of System.RuntimeTypeHandle.GetTypeByName | parameter | 32 | +| Parameter 3 of System.SByte.TryParse | parameter | 32 | +| Parameter 3 of System.Single.TryParse | parameter | 32 | +| Parameter 3 of System.String.MakeSeparatorList | parameter | 32 | +| Parameter 3 of System.String.TryGetSpan | parameter | 32 | +| Parameter 3 of System.StubHelpers.AnsiCharMarshaler.DoAnsiConversion | parameter | 32 | +| Parameter 3 of System.StubHelpers.VBByValStrMarshaler.ConvertToNative | parameter | 32 | +| Parameter 3 of System.TermInfo.ParameterizedStrings.GetDynamicOrStaticVariables | parameter | 32 | +| Parameter 3 of System.Text.ASCIIEncoding.DecodeFirstRune | parameter | 32 | +| Parameter 3 of System.Text.ASCIIEncoding.EncodeRune | parameter | 32 | +| Parameter 3 of System.Text.DecoderFallbackBuffer.InternalFallback | parameter | 32 | +| Parameter 3 of System.Text.DecoderNLS.DrainLeftoverDataForGetChars | parameter | 32 | +| Parameter 3 of System.Text.EncoderFallbackBuffer.TryInternalFallbackGetBytes | parameter | 32 | +| Parameter 3 of System.Text.EncoderNLS.TryDrainLeftoverDataForGetBytes | parameter | 32 | +| Parameter 3 of System.Text.Encoding.DecodeFirstRune | parameter | 32 | +| Parameter 3 of System.Text.Encoding.EncodeRune | parameter | 32 | +| Parameter 3 of System.Text.Latin1Encoding.DecodeFirstRune | parameter | 32 | +| Parameter 3 of System.Text.Latin1Encoding.EncodeRune | parameter | 32 | +| Parameter 3 of System.Text.StringBuilder.MakeRoom | parameter | 32 | +| Parameter 3 of System.Text.StringBuilder.Remove | parameter | 32 | +| Parameter 3 of System.Text.UTF8Encoding.DecodeFirstRune | parameter | 32 | +| Parameter 3 of System.Text.UTF8Encoding.EncodeRune | parameter | 32 | +| Parameter 3 of System.Text.Unicode.TextSegmentationUtility.DecodeFirstRune.Invoke | parameter | 32 | +| Parameter 3 of System.Text.Unicode.Utf8.FromUtf16 | parameter | 32 | +| Parameter 3 of System.Text.Unicode.Utf8.ToUtf16 | parameter | 32 | +| Parameter 3 of System.Text.Unicode.Utf8Utility.GetPointerToFirstInvalidByte | parameter | 32 | +| Parameter 3 of System.Text.Unicode.Utf16Utility.GetPointerToFirstInvalidChar | parameter | 32 | +| Parameter 3 of System.Threading.Mutex..ctor | parameter | 32 | +| Parameter 3 of System.Threading.Mutex.CreateMutexCore | parameter | 32 | +| Parameter 3 of System.Threading.SpinLock.CompareExchange | parameter | 32 | +| Parameter 3 of System.Threading.SpinLock.ContinueTryEnterWithThreadTracking | parameter | 32 | +| Parameter 3 of System.Threading.Tasks.AwaitTaskContinuation.RunCallback | parameter | 32 | +| Parameter 3 of System.Threading.Tasks.SingleProducerSingleConsumerQueue.TryDequeueSlow | parameter | 32 | +| Parameter 3 of System.Threading.Tasks.Task.AtomicStateUpdate | parameter | 32 | +| Parameter 3 of System.Threading.ThreadPool.GetNextConfigUInt32Value | parameter | 32 | +| Parameter 3 of System.TimeOnly.TryParse | parameter | 32 | +| Parameter 3 of System.TimeOnly.TryParseInternal | parameter | 32 | +| Parameter 3 of System.TimeSpan.TryParseExact | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.GetAdjustmentRuleForTime | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.GetDisplayName | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.GetFullValueForDisplayNameField | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.GetUtcOffsetFromUtc | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TZif_ParseMDateRule | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TZif_ParsePosixDateTime | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TryConvertWindowsIdToIanaId | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TryGetTimeZone | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TryGetTimeZoneFromLocalMachine | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TryGetTimeZoneUsingId | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.TryPopulateTimeZoneDisplayNamesFromGlobalizationData | parameter | 32 | +| Parameter 3 of System.TimeZoneInfo.ValidateTimeZoneInfo | parameter | 32 | +| Parameter 3 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 3 of System.TypeNameParser.ResolveAssembly | parameter | 32 | +| Parameter 3 of System.UInt16.TryParse | parameter | 32 | +| Parameter 3 of System.UInt32.TryParse | parameter | 32 | +| Parameter 3 of System.UInt64.TryParse | parameter | 32 | +| Parameter 3 of System.UIntPtr.TryParse | parameter | 32 | +| Parameter 3 of System.Version.TryFormat | parameter | 32 | +| Parameter 3 of System.Version.TryParseComponent | parameter | 32 | +| Parameter 3 of System.__DTString.GetSeparatorToken | parameter | 32 | +| Parameter 3 of System.__DTString.MatchSpecifiedWords | parameter | 32 | +| Parameter 4 of Interop.CallStringMethod | parameter | 32 | +| Parameter 4 of System.Buffers.Text.Utf8Formatter.TryFormatUInt64D | parameter | 32 | +| Parameter 4 of System.Buffers.Text.Utf8Formatter.TryFormatUInt64N | parameter | 32 | +| Parameter 4 of System.Buffers.Text.Utf8Formatter.TryFormatUInt64X | parameter | 32 | +| Parameter 4 of System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffset | parameter | 32 | +| Parameter 4 of System.Buffers.Text.Utf8Parser.TryParseAsSpecialFloatingPoint | parameter | 32 | +| Parameter 4 of System.Buffers.Text.Utf8Parser.TryParseNumber | parameter | 32 | +| Parameter 4 of System.Collections.Concurrent.ConcurrentQueue.SnapForObservation | parameter | 32 | +| Parameter 4 of System.Collections.Hashtable.InitHash | parameter | 32 | +| Parameter 4 of System.ConsolePal.g__AppendToStdInReaderUntil\|83_2 | parameter | 32 | +| Parameter 4 of System.ConsolePal.g__BufferUntil\|83_1 | parameter | 32 | +| Parameter 4 of System.ConsolePal.g__ReadRowOrCol\|83_3 | parameter | 32 | +| Parameter 4 of System.ConsolePal.TryGetSpecialConsoleKey | parameter | 32 | +| Parameter 4 of System.DateOnly.TryParseExact | parameter | 32 | +| Parameter 4 of System.DateOnly.TryParseExactInternal | parameter | 32 | +| Parameter 4 of System.DateTime.GetTime | parameter | 32 | +| Parameter 4 of System.DateTime.GetTimePrecise | parameter | 32 | +| Parameter 4 of System.DateTime.TryParseExact | parameter | 32 | +| Parameter 4 of System.DateTimeOffset.TryParseExact | parameter | 32 | +| Parameter 4 of System.DateTimeParse.DoStrictParse | parameter | 32 | +| Parameter 4 of System.DateTimeParse.Lex | parameter | 32 | +| Parameter 4 of System.DateTimeParse.ParseByFormat | parameter | 32 | +| Parameter 4 of System.DateTimeParse.ParseExact | parameter | 32 | +| Parameter 4 of System.DateTimeParse.ParseExactMultiple | parameter | 32 | +| Parameter 4 of System.DateTimeParse.TryParse | parameter | 32 | +| Parameter 4 of System.DateTimeParse.TryParseExact | parameter | 32 | +| Parameter 4 of System.DateTimeParse.TryParseExactMultiple | parameter | 32 | +| Parameter 4 of System.Diagnostics.Debug.AssertInterpolatedStringHandler..ctor | parameter | 32 | +| Parameter 4 of System.Diagnostics.Debug.WriteIfInterpolatedStringHandler..ctor | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.ActivityTracker.OnStart | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.ActivityTracker.OnStop | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.EventPipeEventProvider.EventRegister | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.EventProvider.GetDataFromController | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.EventSource.UpdateDescriptor | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.IEventProvider.EventRegister | parameter | 32 | +| Parameter 4 of System.Diagnostics.Tracing.NoOpEventProvider.EventRegister | parameter | 32 | +| Parameter 4 of System.Enum.TryParse | parameter | 32 | +| Parameter 4 of System.Enum.TryParseByName | parameter | 32 | +| Parameter 4 of System.Enum.TryParseInt64Enum | parameter | 32 | +| Parameter 4 of System.Enum.TryParseRareEnum | parameter | 32 | +| Parameter 4 of System.Enum.TryParseUInt64Enum | parameter | 32 | +| Parameter 4 of System.Globalization.CalendarData.EnumMonthNames | parameter | 32 | +| Parameter 4 of System.Globalization.CompareInfo.IndexOf | parameter | 32 | +| Parameter 4 of System.Globalization.CompareInfo.IsPrefix | parameter | 32 | +| Parameter 4 of System.Globalization.CompareInfo.IsSuffix | parameter | 32 | +| Parameter 4 of System.Globalization.CompareInfo.LastIndexOf | parameter | 32 | +| Parameter 4 of System.Globalization.DateTimeFormatInfo.Tokenize | parameter | 32 | +| Parameter 4 of System.Globalization.EastAsianLunisolarCalendar.GregorianToLunar | parameter | 32 | +| Parameter 4 of System.Globalization.EastAsianLunisolarCalendar.LunarToGregorian | parameter | 32 | +| Parameter 4 of System.Globalization.EastAsianLunisolarCalendar.TimeToLunar | parameter | 32 | +| Parameter 4 of System.Globalization.TimeSpanFormat.TryFormatStandard | parameter | 32 | +| Parameter 4 of System.Globalization.TimeSpanParse.ParseExactDigits | parameter | 32 | +| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExact | parameter | 32 | +| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExactMultiple | parameter | 32 | +| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExactMultipleTimeSpan | parameter | 32 | +| Parameter 4 of System.Globalization.TimeSpanParse.TryParseExactTimeSpan | parameter | 32 | +| Parameter 4 of System.Globalization.UmAlQuraCalendar.ConvertHijriToGregorian | parameter | 32 | +| Parameter 4 of System.IO.BufferedStream.ReadFromBuffer | parameter | 32 | +| Parameter 4 of System.IO.Path.TryJoin | parameter | 32 | +| Parameter 4 of System.IO.StdInReader.MapBufferToConsoleKey | parameter | 32 | +| Parameter 4 of System.MemoryExtensions.TryWriteInterpolatedStringHandler..ctor | parameter | 32 | +| Parameter 4 of System.Number.g__TryFormatInt64Slow\|45_0 | parameter | 32 | +| Parameter 4 of System.Number.g__TryFormatUInt32Slow\|43_0 | parameter | 32 | +| Parameter 4 of System.Number.g__TryFormatUInt64Slow\|47_0 | parameter | 32 | +| Parameter 4 of System.Number.Grisu3.TryDigitGenCounted | parameter | 32 | +| Parameter 4 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | +| Parameter 4 of System.Number.Grisu3.TryRunCounted | parameter | 32 | +| Parameter 4 of System.Number.Grisu3.TryRunShortest | parameter | 32 | +| Parameter 4 of System.Number.TryFormatDecimal | parameter | 32 | +| Parameter 4 of System.Number.TryFormatDouble | parameter | 32 | +| Parameter 4 of System.Number.TryFormatHalf | parameter | 32 | +| Parameter 4 of System.Number.TryFormatInt64 | parameter | 32 | +| Parameter 4 of System.Number.TryFormatSingle | parameter | 32 | +| Parameter 4 of System.Number.TryFormatUInt32 | parameter | 32 | +| Parameter 4 of System.Number.TryFormatUInt64 | parameter | 32 | +| Parameter 4 of System.Number.TryInt32ToHexStr | parameter | 32 | +| Parameter 4 of System.Number.TryInt64ToHexStr | parameter | 32 | +| Parameter 4 of System.Number.TryNegativeInt32ToDecStr | parameter | 32 | +| Parameter 4 of System.Number.TryNegativeInt64ToDecStr | parameter | 32 | +| Parameter 4 of System.Reflection.AssemblyName.EscapeString | parameter | 32 | +| Parameter 4 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 4 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | +| Parameter 4 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | +| Parameter 4 of System.Reflection.CustomAttribute._ParseAttributeUsageAttribute | parameter | 32 | +| Parameter 4 of System.Reflection.Emit.DynamicResolver.ResolveToken | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport.GetDefaultValue | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport.GetPInvokeMap | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport.GetPropertyProps | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport._GetDefaultValue | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 4 of System.Reflection.MetadataImport._GetPropertyProps | parameter | 32 | +| Parameter 4 of System.Reflection.RuntimeAssembly.GetVersion | parameter | 32 | +| Parameter 4 of System.Reflection.RuntimeEventInfo..ctor | parameter | 32 | +| Parameter 4 of System.Reflection.RuntimePropertyInfo..ctor | parameter | 32 | +| Parameter 4 of System.Resolver.ResolveToken | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToObject | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.BindToStorage | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.ParseDisplayName | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.IMoniker.Reduce | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeComp.Bind | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeComp.BindType | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation2 | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetNames | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetParamCustData | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.Invoke | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetNames | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeInfo.Invoke | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation2 | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComWrappers.CallComputeVtables | parameter | 32 | +| Parameter 4 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal | parameter | 32 | +| Parameter 4 of System.RuntimeFieldHandle.GetValue | parameter | 32 | +| Parameter 4 of System.RuntimeType.FilterHelper | parameter | 32 | +| Parameter 4 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateEvents | parameter | 32 | +| Parameter 4 of System.RuntimeTypeHandle.GetActivationInfo | parameter | 32 | +| Parameter 4 of System.TermInfo.ParameterizedStrings.EvaluateInternal | parameter | 32 | +| Parameter 4 of System.Text.ASCIIEncoding.GetByteCountFast | parameter | 32 | +| Parameter 4 of System.Text.ASCIIEncoding.GetCharCountFast | parameter | 32 | +| Parameter 4 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 4 of System.Text.DecoderFallbackBuffer.TryInternalFallbackGetChars | parameter | 32 | +| Parameter 4 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 4 of System.Text.EncoderFallbackBuffer.TryInternalFallbackGetBytes | parameter | 32 | +| Parameter 4 of System.Text.EncoderNLS.TryDrainLeftoverDataForGetBytes | parameter | 32 | +| Parameter 4 of System.Text.Encoding.GetByteCountFast | parameter | 32 | +| Parameter 4 of System.Text.Encoding.GetCharCountFast | parameter | 32 | +| Parameter 4 of System.Text.Latin1Encoding.GetByteCountFast | parameter | 32 | +| Parameter 4 of System.Text.Latin1Encoding.GetCharCountFast | parameter | 32 | +| Parameter 4 of System.Text.StringBuilder.MakeRoom | parameter | 32 | +| Parameter 4 of System.Text.StringBuilder.Remove | parameter | 32 | +| Parameter 4 of System.Text.UTF8Encoding.GetByteCountFast | parameter | 32 | +| Parameter 4 of System.Text.UTF8Encoding.GetCharCountFast | parameter | 32 | +| Parameter 4 of System.Text.Unicode.Utf8Utility.TranscodeToUtf8 | parameter | 32 | +| Parameter 4 of System.Text.Unicode.Utf8Utility.TranscodeToUtf16 | parameter | 32 | +| Parameter 4 of System.Threading.EventWaitHandle..ctor | parameter | 32 | +| Parameter 4 of System.Threading.EventWaitHandle.CreateEventCore | parameter | 32 | +| Parameter 4 of System.Threading.Semaphore..ctor | parameter | 32 | +| Parameter 4 of System.Threading.Semaphore.CreateSemaphoreCore | parameter | 32 | +| Parameter 4 of System.TimeOnly.TryParseExact | parameter | 32 | +| Parameter 4 of System.TimeOnly.TryParseExactInternal | parameter | 32 | +| Parameter 4 of System.TimeSpan.TryParseExact | parameter | 32 | +| Parameter 4 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 4 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 4 of System.TimeZoneInfo.TryPopulateTimeZoneDisplayNamesFromGlobalizationData | parameter | 32 | +| Parameter 4 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 5 of System.Buffers.Text.Utf8Parser.TryParseAsSpecialFloatingPoint | parameter | 32 | +| Parameter 5 of System.DateTimeParse.Lex | parameter | 32 | +| Parameter 5 of System.DateTimeParse.TryParseExact | parameter | 32 | +| Parameter 5 of System.DateTimeParse.TryParseExactMultiple | parameter | 32 | +| Parameter 5 of System.Diagnostics.Tracing.ActivityTracker.OnStart | parameter | 32 | +| Parameter 5 of System.Diagnostics.Tracing.EventSource.Write | parameter | 32 | +| Parameter 5 of System.Globalization.EastAsianLunisolarCalendar.GregorianToLunar | parameter | 32 | +| Parameter 5 of System.Globalization.EastAsianLunisolarCalendar.LunarToGregorian | parameter | 32 | +| Parameter 5 of System.Globalization.UmAlQuraCalendar.ConvertHijriToGregorian | parameter | 32 | +| Parameter 5 of System.IO.StdInReader.MapBufferToConsoleKey | parameter | 32 | +| Parameter 5 of System.MemoryExtensions.TryWriteInterpolatedStringHandler..ctor | parameter | 32 | +| Parameter 5 of System.Number.g__TryFormatInt32Slow\|41_0 | parameter | 32 | +| Parameter 5 of System.Number.Grisu3.TryDigitGenShortest | parameter | 32 | +| Parameter 5 of System.Number.Grisu3.TryRoundWeedCounted | parameter | 32 | +| Parameter 5 of System.Number.Grisu3.TryRunShortest | parameter | 32 | +| Parameter 5 of System.Number.TryFormatInt32 | parameter | 32 | +| Parameter 5 of System.Reflection.AssemblyName.EnsureDestinationSize | parameter | 32 | +| Parameter 5 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 5 of System.Reflection.CustomAttribute.CreateCaObject | parameter | 32 | +| Parameter 5 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | +| Parameter 5 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | +| Parameter 5 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 5 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.IMoniker.ParseDisplayName | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeComp.Bind | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.GetDocumentation | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeInfo.GetDocumentation | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib2.FindName | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib2.GetDocumentation | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib.FindName | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComTypes.ITypeLib.GetDocumentation | parameter | 32 | +| Parameter 5 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateObjectForComInstanceInternal | parameter | 32 | +| Parameter 5 of System.RuntimeType.FilterHelper | parameter | 32 | +| Parameter 5 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateProperties | parameter | 32 | +| Parameter 5 of System.RuntimeType.RuntimeTypeCache.MemberInfoCache.PopulateRtFields | parameter | 32 | +| Parameter 5 of System.TermInfo.ParameterizedStrings.EvaluateInternal | parameter | 32 | +| Parameter 5 of System.Text.ASCIIEncoding.GetBytesFast | parameter | 32 | +| Parameter 5 of System.Text.ASCIIEncoding.GetCharsFast | parameter | 32 | +| Parameter 5 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 5 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 5 of System.Text.Encoding.GetBytesFast | parameter | 32 | +| Parameter 5 of System.Text.Encoding.GetCharsFast | parameter | 32 | +| Parameter 5 of System.Text.Latin1Encoding.GetBytesFast | parameter | 32 | +| Parameter 5 of System.Text.Latin1Encoding.GetCharsFast | parameter | 32 | +| Parameter 5 of System.Text.UTF8Encoding.GetBytesFast | parameter | 32 | +| Parameter 5 of System.Text.UTF8Encoding.GetCharsFast | parameter | 32 | +| Parameter 5 of System.Text.Unicode.Utf8Utility.TranscodeToUtf8 | parameter | 32 | +| Parameter 5 of System.Text.Unicode.Utf8Utility.TranscodeToUtf16 | parameter | 32 | +| Parameter 5 of System.TimeZoneInfo.GetIsDaylightSavingsFromUtc | parameter | 32 | +| Parameter 5 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 5 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 5 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 5 of System.TypeNameParser.ConstructType | parameter | 32 | +| Parameter 5 of System.TypeNameParser.GetType | parameter | 32 | +| Parameter 5 of System.TypeNameParser.ResolveType | parameter | 32 | +| Parameter 6 of System.Buffers.Text.Utf8Parser.TryCreateTimeSpan | parameter | 32 | +| Parameter 6 of System.Enum.TryParseUInt32Enum | parameter | 32 | +| Parameter 6 of System.Globalization.EastAsianLunisolarCalendar.GregorianToLunar | parameter | 32 | +| Parameter 6 of System.Globalization.EastAsianLunisolarCalendar.LunarToGregorian | parameter | 32 | +| Parameter 6 of System.Globalization.TimeSpanParse.TryTimeToTicks | parameter | 32 | +| Parameter 6 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 6 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | +| Parameter 6 of System.Reflection.CustomAttribute.GetPropertyOrFieldData | parameter | 32 | +| Parameter 6 of System.Reflection.CustomAttribute._GetPropertyOrFieldData | parameter | 32 | +| Parameter 6 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 6 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 6 of System.Runtime.InteropServices.ComTypes.ITypeComp.Bind | parameter | 32 | +| Parameter 6 of System.RuntimeFieldHandle.SetValue | parameter | 32 | +| Parameter 6 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 6 of System.Text.DecoderNLS.Convert | parameter | 32 | +| Parameter 6 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 6 of System.Text.EncoderNLS.Convert | parameter | 32 | +| Parameter 6 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 6 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 6 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 7 of System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffsetInterpretingDataAsLocalTime | parameter | 32 | +| Parameter 7 of System.DateTime.TryCreate | parameter | 32 | +| Parameter 7 of System.DefaultBinder.BindToMethod | parameter | 32 | +| Parameter 7 of System.Enum.TryParseInt32Enum | parameter | 32 | +| Parameter 7 of System.Number.Dragon4 | parameter | 32 | +| Parameter 7 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 7 of System.Reflection.Binder.BindToMethod | parameter | 32 | +| Parameter 7 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | +| Parameter 7 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 7 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 7 of System.Runtime.InteropServices.ComTypes.ITypeInfo2.Invoke | parameter | 32 | +| Parameter 7 of System.Runtime.InteropServices.ComTypes.ITypeInfo.Invoke | parameter | 32 | +| Parameter 7 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 7 of System.Text.DecoderNLS.Convert | parameter | 32 | +| Parameter 7 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 7 of System.Text.EncoderNLS.Convert | parameter | 32 | +| Parameter 7 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 7 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 7 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 8 of System.Activator.CreateInstanceInternal | parameter | 32 | +| Parameter 8 of System.Buffers.Text.Utf8Parser.TryCreateDateTime | parameter | 32 | +| Parameter 8 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 8 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | +| Parameter 8 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 8 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 8 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 8 of System.Text.DecoderNLS.Convert | parameter | 32 | +| Parameter 8 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 8 of System.Text.EncoderNLS.Convert | parameter | 32 | +| Parameter 8 of System.TimeZoneInfo.TZif_ParsePosixFormat | parameter | 32 | +| Parameter 8 of System.TimeZoneInfo.TZif_ParseRaw | parameter | 32 | +| Parameter 8 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 9 of System.Globalization.Calendar.TryToDateTime | parameter | 32 | +| Parameter 9 of System.Globalization.GregorianCalendar.TryToDateTime | parameter | 32 | +| Parameter 9 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 9 of System.Reflection.CustomAttribute.FilterCustomAttributeRecord | parameter | 32 | +| Parameter 9 of System.Reflection.MetadataImport.GetMarshalAs | parameter | 32 | +| Parameter 9 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 9 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 9 of System.Text.DecoderNLS.Convert | parameter | 32 | +| Parameter 9 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 9 of System.Text.EncoderNLS.Convert | parameter | 32 | +| Parameter 9 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 10 of System.Buffers.Text.Utf8Parser.TryCreateDateTimeOffset | parameter | 32 | +| Parameter 10 of System.Diagnostics.StackFrameHelper.GetSourceLineInfoDelegate.Invoke | parameter | 32 | +| Parameter 10 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 10 of System.Reflection.MetadataImport._GetMarshalAs | parameter | 32 | +| Parameter 10 of System.Text.Decoder.Convert | parameter | 32 | +| Parameter 10 of System.Text.DecoderNLS.Convert | parameter | 32 | +| Parameter 10 of System.Text.Encoder.Convert | parameter | 32 | +| Parameter 10 of System.Text.EncoderNLS.Convert | parameter | 32 | +| Parameter 10 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 11 of System.Diagnostics.StackFrameHelper.GetSourceLineInfoDelegate.Invoke | parameter | 32 | +| Parameter 11 of System.Reflection.Associates.AssignAssociates | parameter | 32 | +| Parameter 11 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 12 of System.Diagnostics.StackFrameHelper.GetSourceLineInfoDelegate.Invoke | parameter | 32 | +| Parameter 12 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 13 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 14 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 15 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 16 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 17 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 18 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 19 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 20 of System.TupleExtensions.Deconstruct | parameter | 32 | +| Parameter 21 of System.TupleExtensions.Deconstruct | parameter | 32 | +| System.ByReference.Value | property | 32 | +| System.ByReference.get_Value | method | 32 | +| System.Collections.Generic.Dictionary.CollectionsMarshalHelper.GetValueRefOrAddDefault | method | 32 | +| System.Collections.Generic.Dictionary.FindValue | method | 32 | +| System.Collections.Generic.Dictionary.GetBucket | method | 32 | +| System.Collections.Generic.HashSet.GetBucketRef | method | 32 | +| System.Decimal.AsMutable | method | 32 | +| System.Decimal.Max | method | 32 | +| System.Decimal.Min | method | 32 | +| System.Diagnostics.Tracing.EventWrittenEventArgs.Metadata | property | 32 | +| System.Diagnostics.Tracing.EventWrittenEventArgs.get_Metadata | method | 32 | +| System.ReadOnlySpan.Enumerator.Current | property | 32 | +| System.ReadOnlySpan.Enumerator.get_Current | method | 32 | +| System.ReadOnlySpan.GetPinnableReference | method | 32 | +| System.ReadOnlySpan.Item | property | 32 | +| System.ReadOnlySpan.get_Item | method | 32 | +| System.Runtime.CompilerServices.CastHelpers.Element | method | 32 | +| System.Runtime.CompilerServices.CastHelpers.LdelemaRef | method | 32 | +| System.Runtime.CompilerServices.CastHelpers.TableData | method | 32 | +| System.Runtime.CompilerServices.CastHelpers.ThrowArrayMismatchException | method | 32 | +| System.Runtime.CompilerServices.CastHelpers.Unbox | method | 32 | +| System.Runtime.CompilerServices.CastHelpers.Unbox_Helper | method | 32 | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.StateMachineBox.PerCoreCacheSlot | property | 32 | +| System.Runtime.CompilerServices.PoolingAsyncValueTaskMethodBuilder.StateMachineBox.get_PerCoreCacheSlot | method | 32 | +| System.Runtime.CompilerServices.RuntimeHelpers.GetMultiDimensionalArrayBounds | method | 32 | +| System.Runtime.CompilerServices.RuntimeHelpers.GetRawData | method | 32 | +| System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrAddDefault | method | 32 | +| System.Runtime.InteropServices.CollectionsMarshal.GetValueRefOrNullRef | method | 32 | +| System.Runtime.InteropServices.MemoryMarshal.AsRef | method | 32 | +| System.Runtime.InteropServices.MemoryMarshal.GetArrayDataReference | method | 32 | +| System.Runtime.InteropServices.MemoryMarshal.GetNonNullPinnableReference | method | 32 | +| System.Runtime.InteropServices.MemoryMarshal.GetReference | method | 32 | +| System.Span.Enumerator.Current | property | 32 | +| System.Span.Enumerator.get_Current | method | 32 | +| System.Span.GetPinnableReference | method | 32 | +| System.Span.Item | property | 32 | +| System.Span.get_Item | method | 32 | +| System.SpanHelpers.Add | method | 32 | +| System.String.GetPinnableReference | method | 32 | +| System.String.GetRawStringData | method | 32 | +| System.Text.ValueStringBuilder.GetPinnableReference | method | 32 | +| System.Text.ValueStringBuilder.Item | property | 32 | +| System.Text.ValueStringBuilder.get_Item | method | 32 | +| System.Threading.OverlappedData.EventHandle | property | 32 | +| System.Threading.OverlappedData.OffsetHigh | property | 32 | +| System.Threading.OverlappedData.OffsetLow | property | 32 | +| System.Threading.OverlappedData.get_EventHandle | method | 32 | +| System.Threading.OverlappedData.get_OffsetHigh | method | 32 | +| System.Threading.OverlappedData.get_OffsetLow | method | 32 | diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql index e35b46f673d..78dab812d72 100644 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql +++ b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.ql @@ -1,31 +1,59 @@ import cil import semmle.code.cil.Type -private string elementType(Element e) { - e instanceof Method and result = "method" +private string elementType(Element e, string toString) { + toString = e.(Method).getQualifiedName() and result = "method" or - e instanceof Property and result = "property" + toString = e.(Property).getQualifiedName() and result = "property" or - e instanceof Parameter and result = "parameter" + e = + any(Parameter p | + toString = "Parameter " + p.getIndex() + " of " + p.getDeclaringElement().getQualifiedName() + ) and + result = "parameter" or - e instanceof LocalVariable and result = "local" + e = + any(LocalVariable v | + toString = + "Local variable " + v.getIndex() + " of method " + + v.getImplementation().getMethod().getQualifiedName() + ) and + result = "local" or - e instanceof FunctionPointerType and result = "fnptr" + toString = e.(FunctionPointerType).getQualifiedName() and result = "fnptr" or not e instanceof Method and not e instanceof Property and not e instanceof Parameter and not e instanceof LocalVariable and not e instanceof FunctionPointerType and - result = "other" + result = "other" and + toString = e.toString() } -from Element e, int i +private predicate exclude(string s) { + s in [ + "Parameter 0 of Interop.libobjc.NSOperatingSystemVersion_objc_msgSend_stret", + "Parameter 1 of Interop.procfs.TryParseStatusFile", + "Parameter 1 of Interop.procfs.TryReadFile", + "Parameter 1 of Interop.procfs.TryReadStatusFile", + "Parameter 1 of System.CLRConfig.GetBoolValue", + "Parameter 1 of System.CLRConfig.GetConfigBoolValue", + "Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandleInternal", + "Parameter 2 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandleInternal", + "Parameter 2 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.InvokeUnhandledExceptionPropagation", + ] +} + +from Element e, int i, string toString, string type where cil_type_annotation(e, i) and + type = elementType(e, toString) and + not exclude(toString) and ( - not e instanceof Parameter or + not e instanceof Parameter + or e.(Parameter).getDeclaringElement().(Method).getDeclaringType().getQualifiedName() != "System.Environment" // There are OS specific methods in this class ) -select e.toString(), elementType(e), i +select toString, type, i diff --git a/csharp/ql/test/library-tests/commons/TargetFramework/HasElement.expected b/csharp/ql/test/library-tests/commons/TargetFramework/HasElement.expected index acb05296f84..3eb32adbc73 100644 --- a/csharp/ql/test/library-tests/commons/TargetFramework/HasElement.expected +++ b/csharp/ql/test/library-tests/commons/TargetFramework/HasElement.expected @@ -1,2 +1,2 @@ -| NetFramework4.6.1.cs:7:7:7:8 | C1 | NetFramework4.6.1.cs:5:12:5:69 | [TargetFramework(...)] | -| NetFramework4.6.1.cs:11:7:11:8 | C2 | NetFramework4.6.1.cs:5:12:5:69 | [TargetFramework(...)] | +| NetFramework4.6.1.cs:7:7:7:8 | C1 | NetFramework4.6.1.cs:5:12:5:69 | [assembly: TargetFramework(...)] | +| NetFramework4.6.1.cs:11:7:11:8 | C2 | NetFramework4.6.1.cs:5:12:5:69 | [assembly: TargetFramework(...)] | diff --git a/csharp/ql/test/library-tests/commons/TargetFramework/NetCore.expected b/csharp/ql/test/library-tests/commons/TargetFramework/NetCore.expected index 262bcfef6e3..375d99dde22 100644 --- a/csharp/ql/test/library-tests/commons/TargetFramework/NetCore.expected +++ b/csharp/ql/test/library-tests/commons/TargetFramework/NetCore.expected @@ -1 +1 @@ -| NetCore2.0.cs:5:12:5:26 | [TargetFramework(...)] | +| NetCore2.0.cs:5:12:5:26 | [assembly: TargetFramework(...)] | diff --git a/csharp/ql/test/library-tests/commons/TargetFramework/NetFramework.expected b/csharp/ql/test/library-tests/commons/TargetFramework/NetFramework.expected index 37c79edf484..86291625dee 100644 --- a/csharp/ql/test/library-tests/commons/TargetFramework/NetFramework.expected +++ b/csharp/ql/test/library-tests/commons/TargetFramework/NetFramework.expected @@ -1,2 +1,2 @@ -| NetFramework4.6.1.cs:5:12:5:69 | [TargetFramework(...)] | -| NetFramework4.6.cs:5:12:5:35 | [TargetFramework(...)] | +| NetFramework4.6.1.cs:5:12:5:69 | [assembly: TargetFramework(...)] | +| NetFramework4.6.cs:5:12:5:35 | [assembly: TargetFramework(...)] | diff --git a/csharp/ql/test/library-tests/commons/TargetFramework/NetStandard.expected b/csharp/ql/test/library-tests/commons/TargetFramework/NetStandard.expected index 0adb090a2ce..002c8671892 100644 --- a/csharp/ql/test/library-tests/commons/TargetFramework/NetStandard.expected +++ b/csharp/ql/test/library-tests/commons/TargetFramework/NetStandard.expected @@ -1 +1 @@ -| NetStandard1.3.cs:5:12:5:26 | [TargetFramework(...)] | +| NetStandard1.3.cs:5:12:5:26 | [assembly: TargetFramework(...)] | diff --git a/csharp/ql/test/library-tests/commons/TargetFramework/TargetFrameworks.expected b/csharp/ql/test/library-tests/commons/TargetFramework/TargetFrameworks.expected index 18db82ef118..6858b7a7560 100644 --- a/csharp/ql/test/library-tests/commons/TargetFramework/TargetFrameworks.expected +++ b/csharp/ql/test/library-tests/commons/TargetFramework/TargetFrameworks.expected @@ -1,4 +1,4 @@ -| NetCore2.0.cs:5:12:5:26 | [TargetFramework(...)] | .NETCoreApp | 2.0 | -| NetFramework4.6.1.cs:5:12:5:69 | [TargetFramework(...)] | .NETFramework | 4.6.1 | -| NetFramework4.6.cs:5:12:5:35 | [TargetFramework(...)] | .NETFramework | 4.6 | -| NetStandard1.3.cs:5:12:5:26 | [TargetFramework(...)] | .NETStandard | 1.3 | +| NetCore2.0.cs:5:12:5:26 | [assembly: TargetFramework(...)] | .NETCoreApp | 2.0 | +| NetFramework4.6.1.cs:5:12:5:69 | [assembly: TargetFramework(...)] | .NETFramework | 4.6.1 | +| NetFramework4.6.cs:5:12:5:35 | [assembly: TargetFramework(...)] | .NETFramework | 4.6 | +| NetStandard1.3.cs:5:12:5:26 | [assembly: TargetFramework(...)] | .NETStandard | 1.3 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index a0c047e38cc..acabdc1835a 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -1187,8 +1187,8 @@ Assert.cs: #-----| -> access to local variable s # 24| access to local variable s -#-----| null -> [assertion failure] call to method IsNotNull #-----| non-null -> [assertion success] call to method IsNotNull +#-----| null -> [assertion failure] call to method IsNotNull # 25| call to method WriteLine #-----| -> exit M3 (normal) @@ -1376,8 +1376,8 @@ Assert.cs: #-----| -> null # 45| ... != ... -#-----| true -> [assertion failure] call to method IsFalse #-----| false -> [assertion success] call to method IsFalse +#-----| true -> [assertion failure] call to method IsFalse # 45| null #-----| -> ... != ... @@ -1440,8 +1440,8 @@ Assert.cs: #-----| -> null # 52| ... == ... -#-----| true -> [assertion failure] call to method IsFalse #-----| false -> [assertion success] call to method IsFalse +#-----| true -> [assertion failure] call to method IsFalse # 52| null #-----| -> ... == ... @@ -2068,12 +2068,12 @@ Assert.cs: #-----| -> [b (line 84): true] access to local variable s # 95| [b (line 84): false] access to local variable s -#-----| null -> [assertion failure, b (line 84): false] call to method IsNotNull #-----| non-null -> [assertion success, b (line 84): false] call to method IsNotNull +#-----| null -> [assertion failure, b (line 84): false] call to method IsNotNull # 95| [b (line 84): true] access to local variable s -#-----| null -> [assertion failure, b (line 84): true] call to method IsNotNull #-----| non-null -> [assertion success, b (line 84): true] call to method IsNotNull +#-----| null -> [assertion failure, b (line 84): true] call to method IsNotNull # 96| [b (line 84): false] call to method WriteLine #-----| -> [b (line 84): false] ...; @@ -2338,12 +2338,12 @@ Assert.cs: #-----| -> [b (line 84): true] null # 107| [b (line 84): false] ... != ... -#-----| true -> [assertion failure, b (line 84): false] call to method IsFalse #-----| false -> [assertion success, b (line 84): false] call to method IsFalse +#-----| true -> [assertion failure, b (line 84): false] call to method IsFalse # 107| [b (line 84): true] ... != ... -#-----| true -> [assertion failure, b (line 84): true] call to method IsFalse #-----| false -> [assertion success, b (line 84): true] call to method IsFalse +#-----| true -> [assertion failure, b (line 84): true] call to method IsFalse # 107| [b (line 84): false] null #-----| -> [b (line 84): false] ... != ... @@ -2430,12 +2430,12 @@ Assert.cs: #-----| -> [b (line 84): true] null # 111| [b (line 84): false] ... == ... -#-----| true -> [assertion failure, b (line 84): false] call to method IsFalse #-----| false -> [assertion success, b (line 84): false] call to method IsFalse +#-----| true -> [assertion failure, b (line 84): false] call to method IsFalse # 111| [b (line 84): true] ... == ... -#-----| true -> [assertion failure, b (line 84): true] call to method IsFalse #-----| false -> [assertion success, b (line 84): true] call to method IsFalse +#-----| true -> [assertion failure, b (line 84): true] call to method IsFalse # 111| [b (line 84): false] null #-----| -> [b (line 84): false] ... == ... @@ -2771,15 +2771,15 @@ Assert.cs: #-----| -> this access # 140| access to parameter b1 -#-----| true -> access to parameter b2 #-----| false -> [assertion failure] access to parameter b2 +#-----| true -> access to parameter b2 # 140| [assertion failure] access to parameter b2 -#-----| true -> [assertion failure] access to parameter b3 +#-----| false -> [assertion failure] access to parameter b3 # 140| access to parameter b2 -#-----| true -> [assertion failure] access to parameter b3 #-----| false -> [assertion success] access to parameter b3 +#-----| true -> [assertion failure] access to parameter b3 # 140| [assertion failure] access to parameter b3 #-----| -> [assertion failure] call to method AssertTrueFalse @@ -2980,8 +2980,8 @@ BreakInTry.cs: #-----| -> null # 15| ... == ... -#-----| true -> ; #-----| false -> exit M1 (normal) +#-----| true -> ; # 15| null #-----| -> ... == ... @@ -3116,8 +3116,8 @@ BreakInTry.cs: #-----| -> access to parameter args # 47| [finally: return] foreach (... ... in ...) ... -#-----| non-empty -> [finally: return] String arg #-----| return -> exit M3 (normal) +#-----| non-empty -> [finally: return] String arg # 47| foreach (... ... in ...) ... #-----| non-empty -> String arg @@ -3216,12 +3216,12 @@ BreakInTry.cs: #-----| -> access to parameter args # 65| [finally: return] foreach (... ... in ...) ... -#-----| non-empty -> [finally: return] String arg #-----| return -> exit M4 (normal) +#-----| non-empty -> [finally: return] String arg # 65| foreach (... ... in ...) ... -#-----| non-empty -> String arg #-----| empty -> exit M4 (normal) +#-----| non-empty -> String arg # 65| String arg #-----| -> {...} @@ -3396,12 +3396,12 @@ ConditionalAccess.cs: #-----| -> exit M1 # 3| access to parameter i -#-----| non-null -> call to method ToString #-----| null -> exit M1 (normal) +#-----| non-null -> call to method ToString # 3| call to method ToString -#-----| non-null -> call to method ToLower #-----| null -> exit M1 (normal) +#-----| non-null -> call to method ToLower # 3| call to method ToLower #-----| -> exit M1 (normal) @@ -3415,8 +3415,8 @@ ConditionalAccess.cs: #-----| -> exit M2 # 5| access to parameter s -#-----| non-null -> access to property Length #-----| null -> exit M2 (normal) +#-----| non-null -> access to property Length # 5| access to property Length #-----| -> exit M2 (normal) @@ -3434,8 +3434,8 @@ ConditionalAccess.cs: #-----| null -> access to parameter s2 # 7| ... ?? ... -#-----| non-null -> access to property Length #-----| null -> exit M3 (normal) +#-----| non-null -> access to property Length # 7| [non-null] ... ?? ... #-----| non-null -> access to property Length @@ -3524,8 +3524,8 @@ ConditionalAccess.cs: #-----| -> exit M6 # 19| access to parameter s1 -#-----| non-null -> access to parameter s2 #-----| null -> exit M6 (normal) +#-----| non-null -> access to parameter s2 # 19| call to method CommaJoinWith #-----| -> exit M6 (normal) @@ -3621,8 +3621,8 @@ ConditionalAccess.cs: #-----| -> ... = ... # 35| access to property Prop -#-----| non-null -> call to method Out #-----| null -> exit M8 (normal) +#-----| non-null -> call to method Out # 35| this access #-----| -> access to property Prop @@ -4058,8 +4058,8 @@ Conditions.cs: #-----| true -> [b (line 46): true] ...; # 51| access to parameter b -#-----| true -> [b (line 46): true] ...; #-----| false -> [b (line 46): false] access to parameter x +#-----| true -> [b (line 46): true] ...; # 52| [b (line 46): true] access to local variable y #-----| -> [b (line 46): true] ...++ @@ -4163,8 +4163,8 @@ Conditions.cs: #-----| true -> [b (line 57): true] ...; # 62| access to parameter b -#-----| true -> [b (line 57): true] ...; #-----| false -> [b (line 57): false] access to parameter x +#-----| true -> [b (line 57): true] ...; # 63| [b (line 57): true] access to local variable y #-----| -> [b (line 57): true] ...++ @@ -4580,8 +4580,8 @@ Conditions.cs: #-----| -> access to parameter args # 116| ... < ... -#-----| true -> {...} #-----| false -> exit M9 (normal) +#-----| true -> {...} # 116| access to parameter args #-----| -> access to property Length @@ -4632,8 +4632,8 @@ Conditions.cs: #-----| true -> [last (line 118): false] ...; # 119| access to local variable last -#-----| true -> [false, last (line 118): true] !... #-----| false -> [true, last (line 118): false] !... +#-----| true -> [false, last (line 118): true] !... # 120| [last (line 118): false] ... = ... #-----| -> [last (line 118): false] if (...) ... @@ -5073,8 +5073,8 @@ ExitMethods.cs: #-----| -> access to parameter b # 68| access to parameter b -#-----| true -> object creation of type Exception #-----| false -> exit ErrorMaybe (normal) +#-----| true -> object creation of type Exception # 69| throw ...; #-----| exception(Exception) -> exit ErrorMaybe (abnormal) @@ -5230,8 +5230,8 @@ ExitMethods.cs: #-----| -> 0 # 112| ... != ... -#-----| false -> "input" #-----| true -> 1 +#-----| false -> "input" # 112| ... ? ... : ... #-----| -> return ...; @@ -5354,8 +5354,8 @@ ExitMethods.cs: #-----| -> exit AssertFalse (normal) # 132| access to parameter b -#-----| true -> [assertion failure] call to method IsFalse #-----| false -> [assertion success] call to method IsFalse +#-----| true -> [assertion failure] call to method IsFalse # 134| enter FailingAssertion3 #-----| -> {...} @@ -5558,8 +5558,8 @@ Finally.cs: #-----| -> ...; # 11| call to method WriteLine -#-----| -> {...} #-----| exception(Exception) -> [finally: exception(Exception)] {...} +#-----| -> {...} # 11| ...; #-----| -> "Try1" @@ -5612,8 +5612,8 @@ Finally.cs: #-----| -> ...; # 23| call to method WriteLine -#-----| exception(Exception) -> [exception: Exception] catch (...) {...} #-----| -> return ...; +#-----| exception(Exception) -> [exception: Exception] catch (...) {...} # 23| ...; #-----| -> "Try2" @@ -5752,8 +5752,8 @@ Finally.cs: #-----| -> ...; # 58| call to method WriteLine -#-----| exception(Exception) -> [exception: Exception] catch (...) {...} #-----| -> return ...; +#-----| exception(Exception) -> [exception: Exception] catch (...) {...} # 58| ...; #-----| -> "Try3" @@ -5880,8 +5880,8 @@ Finally.cs: #-----| -> 0 # 77| ... > ... -#-----| true -> {...} #-----| false -> exit M4 (normal) +#-----| true -> {...} # 77| 0 #-----| -> ... > ... @@ -6179,16 +6179,16 @@ Finally.cs: #-----| -> this access # 107| access to field Field -#-----| exception(NullReferenceException) -> [finally: exception(NullReferenceException)] {...} #-----| -> access to property Length +#-----| exception(NullReferenceException) -> [finally: exception(NullReferenceException)] {...} # 107| this access #-----| -> access to field Field # 107| access to property Length +#-----| -> 0 #-----| exception(Exception) -> [finally: exception(Exception)] {...} #-----| exception(NullReferenceException) -> [finally: exception(NullReferenceException)] {...} -#-----| -> 0 # 107| ... == ... #-----| true -> return ...; @@ -6204,16 +6204,16 @@ Finally.cs: #-----| -> this access # 109| access to field Field -#-----| exception(NullReferenceException) -> [finally: exception(NullReferenceException)] {...} #-----| -> access to property Length +#-----| exception(NullReferenceException) -> [finally: exception(NullReferenceException)] {...} # 109| this access #-----| -> access to field Field # 109| access to property Length +#-----| -> 1 #-----| exception(Exception) -> [finally: exception(Exception)] {...} #-----| exception(NullReferenceException) -> [finally: exception(NullReferenceException)] {...} -#-----| -> 1 # 109| ... == ... #-----| true -> object creation of type OutOfMemoryException @@ -6335,24 +6335,24 @@ Finally.cs: #-----| -> 0 # 114| ... == ... -#-----| true -> [false] !... #-----| false -> [true] !... +#-----| true -> [false] !... # 114| [finally: exception(Exception)] ... == ... -#-----| true -> [false, finally: exception(Exception)] !... #-----| false -> [true, finally: exception(Exception)] !... +#-----| true -> [false, finally: exception(Exception)] !... # 114| [finally: exception(NullReferenceException)] ... == ... -#-----| true -> [false, finally: exception(NullReferenceException)] !... #-----| false -> [true, finally: exception(NullReferenceException)] !... +#-----| true -> [false, finally: exception(NullReferenceException)] !... # 114| [finally: exception(OutOfMemoryException)] ... == ... -#-----| true -> [false, finally: exception(OutOfMemoryException)] !... #-----| false -> [true, finally: exception(OutOfMemoryException)] !... +#-----| true -> [false, finally: exception(OutOfMemoryException)] !... # 114| [finally: return] ... == ... -#-----| true -> [false, finally: return] !... #-----| false -> [true, finally: return] !... +#-----| true -> [false, finally: return] !... # 114| 0 #-----| -> ... == ... @@ -6490,24 +6490,24 @@ Finally.cs: #-----| -> 0 # 116| ... > ... -#-----| true -> ...; #-----| false -> exit M5 (normal) +#-----| true -> ...; # 116| [finally: exception(Exception)] ... > ... -#-----| true -> [finally: exception(Exception)] ...; #-----| exception(Exception) -> exit M5 (abnormal) +#-----| true -> [finally: exception(Exception)] ...; # 116| [finally: exception(NullReferenceException)] ... > ... -#-----| true -> [finally: exception(NullReferenceException)] ...; #-----| exception(NullReferenceException) -> exit M5 (abnormal) +#-----| true -> [finally: exception(NullReferenceException)] ...; # 116| [finally: exception(OutOfMemoryException)] ... > ... -#-----| true -> [finally: exception(OutOfMemoryException)] ...; #-----| exception(OutOfMemoryException) -> exit M5 (abnormal) +#-----| true -> [finally: exception(OutOfMemoryException)] ...; # 116| [finally: return] ... > ... -#-----| true -> [finally: return] ...; #-----| return -> exit M5 (normal) +#-----| true -> [finally: return] ...; # 116| 0 #-----| -> ... > ... @@ -6622,8 +6622,8 @@ Finally.cs: #-----| -> ...; # 137| call to method WriteLine -#-----| -> {...} #-----| exception(Exception) -> [finally: exception(Exception)] {...} +#-----| -> {...} # 137| ...; #-----| -> "Try" @@ -6741,31 +6741,31 @@ Finally.cs: #-----| -> access to property Length # 158| [finally: exception(ArgumentNullException)] access to property Length +#-----| -> [finally: exception(ArgumentNullException)] 1 #-----| exception(Exception) -> [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} #-----| exception(NullReferenceException) -> [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} -#-----| -> [finally: exception(ArgumentNullException)] 1 # 158| [finally: exception(Exception)] access to property Length +#-----| -> [finally: exception(Exception)] 1 #-----| exception(Exception) -> [finally: exception(Exception), exception: Exception] catch (...) {...} #-----| exception(NullReferenceException) -> [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} -#-----| -> [finally: exception(Exception)] 1 # 158| access to property Length +#-----| -> 1 #-----| exception(Exception) -> [exception: Exception] catch (...) {...} #-----| exception(NullReferenceException) -> [exception: NullReferenceException] catch (...) {...} -#-----| -> 1 # 158| ... == ... -#-----| true -> "1" #-----| false -> exit M8 (normal) +#-----| true -> "1" # 158| [finally: exception(ArgumentNullException)] ... == ... -#-----| true -> [finally: exception(ArgumentNullException)] "1" #-----| exception(ArgumentNullException) -> exit M8 (abnormal) +#-----| true -> [finally: exception(ArgumentNullException)] "1" # 158| [finally: exception(Exception)] ... == ... -#-----| true -> [finally: exception(Exception)] "1" #-----| exception(Exception) -> exit M8 (abnormal) +#-----| true -> [finally: exception(Exception)] "1" # 158| 1 #-----| -> ... == ... @@ -6786,16 +6786,16 @@ Finally.cs: #-----| exception(Exception) -> [exception: Exception] catch (...) {...} # 159| [finally: exception(ArgumentNullException)] object creation of type Exception -#-----| exception(Exception) -> [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} #-----| -> [finally: exception(ArgumentNullException)] throw ...; +#-----| exception(Exception) -> [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} # 159| [finally: exception(Exception)] object creation of type Exception -#-----| exception(Exception) -> [finally: exception(Exception), exception: Exception] catch (...) {...} #-----| -> [finally: exception(Exception)] throw ...; +#-----| exception(Exception) -> [finally: exception(Exception), exception: Exception] catch (...) {...} # 159| object creation of type Exception -#-----| exception(Exception) -> [exception: Exception] catch (...) {...} #-----| -> throw ...; +#-----| exception(Exception) -> [exception: Exception] catch (...) {...} # 159| "1" #-----| -> object creation of type Exception @@ -7090,16 +7090,16 @@ Finally.cs: #-----| -> [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 # 186| [b1 (line 176): false] access to parameter b2 -#-----| true -> [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB #-----| false -> exit M9 (normal) +#-----| true -> [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB # 186| [finally: exception(Exception), b1 (line 176): true] access to parameter b2 -#-----| true -> [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB #-----| exception(Exception) -> exit M9 (abnormal) +#-----| true -> [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB # 186| [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 -#-----| true -> [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB #-----| exception(ExceptionA) -> exit M9 (abnormal) +#-----| true -> [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB # 186| [b1 (line 176): false, b2 (line 176): true] throw ...; #-----| exception(ExceptionB) -> [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} @@ -7111,34 +7111,34 @@ Finally.cs: #-----| exception(ExceptionB) -> [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} # 186| [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB -#-----| exception(Exception) -> [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} #-----| -> [b1 (line 176): false, b2 (line 176): true] throw ...; +#-----| exception(Exception) -> [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} # 186| [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB -#-----| exception(Exception) -> [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} #-----| -> [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; +#-----| exception(Exception) -> [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} # 186| [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB -#-----| exception(Exception) -> [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} #-----| -> [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; +#-----| exception(Exception) -> [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} # 188| [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} -#-----| match -> [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 #-----| exception(Exception) -> exit M9 (abnormal) +#-----| match -> [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 # 188| [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} #-----| match -> [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 # 188| [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} -#-----| match -> [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 #-----| exception(Exception) -> exit M9 (abnormal) +#-----| match -> [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 # 188| [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} #-----| match -> [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 # 188| [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} -#-----| match -> [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 #-----| exception(Exception) -> exit M9 (abnormal) +#-----| match -> [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 # 188| [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} #-----| match -> [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 @@ -7358,32 +7358,32 @@ Finally.cs: #-----| -> access to parameter b3 # 209| [finally(1): exception(Exception)] access to parameter b3 -#-----| true -> [finally(1): exception(Exception)] object creation of type ExceptionC #-----| exception(Exception) -> exit M10 (abnormal) +#-----| true -> [finally(1): exception(Exception)] object creation of type ExceptionC # 209| [finally(1): exception(ExceptionB)] access to parameter b3 -#-----| true -> [finally(1): exception(ExceptionB)] object creation of type ExceptionC #-----| exception(ExceptionB) -> exit M10 (abnormal) +#-----| true -> [finally(1): exception(ExceptionB)] object creation of type ExceptionC # 209| [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 -#-----| true -> [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC #-----| exception(Exception) -> exit M10 (abnormal) +#-----| true -> [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC # 209| [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 -#-----| true -> [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC #-----| exception(ExceptionB) -> exit M10 (abnormal) +#-----| true -> [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC # 209| [finally: exception(Exception)] access to parameter b3 #-----| true -> [finally: exception(Exception)] object creation of type ExceptionC #-----| false -> [finally: exception(Exception)] ...; # 209| [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 -#-----| true -> [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC #-----| exception(Exception) -> exit M10 (abnormal) +#-----| true -> [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC # 209| [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 -#-----| true -> [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC #-----| exception(ExceptionB) -> exit M10 (abnormal) +#-----| true -> [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC # 209| [finally: exception(ExceptionA)] access to parameter b3 #-----| true -> [finally: exception(ExceptionA)] object creation of type ExceptionC @@ -7776,8 +7776,8 @@ Finally.cs: #-----| -> [finally: exception(ExceptionA)] call to method WriteLine # 254| call to method WriteLine -#-----| -> {...} #-----| exception(Exception) -> [finally: exception(Exception)] {...} +#-----| -> {...} # 254| ...; #-----| -> "Mid finally" @@ -7851,8 +7851,8 @@ Finally.cs: #-----| -> ...; # 267| call to method WriteLine -#-----| -> {...} #-----| exception(Exception) -> [finally: exception(Exception)] {...} +#-----| -> {...} # 267| ...; #-----| -> "1" @@ -7927,8 +7927,8 @@ Foreach.cs: #-----| -> access to parameter args # 8| foreach (... ... in ...) ... -#-----| non-empty -> String arg #-----| empty -> exit M1 (normal) +#-----| non-empty -> String arg # 8| String arg #-----| -> ; @@ -7951,8 +7951,8 @@ Foreach.cs: #-----| -> access to parameter args # 14| foreach (... ... in ...) ... -#-----| non-empty -> String _ #-----| empty -> exit M2 (normal) +#-----| non-empty -> String _ # 14| String _ #-----| -> ; @@ -7975,8 +7975,8 @@ Foreach.cs: #-----| -> access to parameter e # 20| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M3 (normal) +#-----| non-empty -> String x # 20| String x #-----| -> ; @@ -8010,8 +8010,8 @@ Foreach.cs: #-----| -> access to parameter args # 26| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M4 (normal) +#-----| non-empty -> String x # 26| (..., ...) #-----| -> ; @@ -8040,8 +8040,8 @@ Foreach.cs: #-----| -> access to parameter args # 32| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M5 (normal) +#-----| non-empty -> String x # 32| (..., ...) #-----| -> ; @@ -8070,8 +8070,8 @@ Foreach.cs: #-----| -> access to parameter args # 38| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M6 (normal) +#-----| non-empty -> String x # 38| (..., ...) #-----| -> ; @@ -8739,8 +8739,8 @@ LoopUnrolling.cs: #-----| non-empty -> String arg # 11| foreach (... ... in ...) ... -#-----| non-empty -> String arg #-----| empty -> exit M1 (normal) +#-----| non-empty -> String arg # 11| String arg #-----| -> ...; @@ -8796,8 +8796,8 @@ LoopUnrolling.cs: #-----| non-empty -> String x # 18| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M2 (normal) +#-----| non-empty -> String x # 18| String x #-----| -> ...; @@ -8826,8 +8826,8 @@ LoopUnrolling.cs: #-----| -> access to parameter args # 24| foreach (... ... in ...) ... -#-----| non-empty -> Char arg #-----| empty -> exit M3 (normal) +#-----| non-empty -> Char arg # 24| Char arg #-----| -> access to parameter args @@ -8949,8 +8949,8 @@ LoopUnrolling.cs: #-----| non-empty -> String x # 40| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M5 (normal) +#-----| non-empty -> String x # 40| String x #-----| -> access to local variable ys @@ -9079,12 +9079,12 @@ LoopUnrolling.cs: #-----| -> { ..., ... } # 58| [b (line 55): false] foreach (... ... in ...) ... -#-----| non-empty -> [b (line 55): false] String x #-----| empty -> exit M7 (normal) +#-----| non-empty -> [b (line 55): false] String x # 58| [b (line 55): true] foreach (... ... in ...) ... -#-----| non-empty -> [b (line 55): true] String x #-----| empty -> exit M7 (normal) +#-----| non-empty -> [b (line 55): true] String x # 58| [unroll (line 58)] foreach (... ... in ...) ... #-----| non-empty -> String x @@ -9183,8 +9183,8 @@ LoopUnrolling.cs: #-----| -> call to method Any # 69| call to method Any -#-----| true -> [false] !... #-----| false -> [true] !... +#-----| true -> [false] !... # 70| return ...; #-----| return -> exit M8 (normal) @@ -9298,8 +9298,8 @@ LoopUnrolling.cs: #-----| non-empty -> String x # 97| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit M11 (normal) +#-----| non-empty -> String x # 97| String x #-----| -> {...} @@ -10388,8 +10388,8 @@ Patterns.cs: #-----| true -> {...} # 8| Int32 i1 -#-----| no-match -> [false] ... is ... #-----| match -> [true] ... is ... +#-----| no-match -> [false] ... is ... # 9| {...} #-----| -> ...; @@ -10422,8 +10422,8 @@ Patterns.cs: #-----| true -> {...} # 12| String s1 -#-----| no-match -> [false] ... is ... #-----| match -> [true] ... is ... +#-----| no-match -> [false] ... is ... # 13| {...} #-----| -> ...; @@ -10456,8 +10456,8 @@ Patterns.cs: #-----| true -> {...} # 16| Object v1 -#-----| no-match -> [false] ... is ... #-----| match -> [true] ... is ... +#-----| no-match -> [false] ... is ... # 17| {...} #-----| -> switch (...) {...} @@ -10482,8 +10482,8 @@ Patterns.cs: #-----| -> Int32 i2 # 24| Int32 i2 -#-----| no-match -> case ...: #-----| match -> access to local variable i2 +#-----| no-match -> case ...: # 24| access to local variable i2 #-----| -> 0 @@ -10693,8 +10693,8 @@ Patterns.cs: #-----| no-match -> { ... } # 54| 1 -#-----| no-match -> [no-match] { ... } #-----| match -> [match] { ... } +#-----| no-match -> [no-match] { ... } # 56| enter M5 #-----| -> {...} @@ -10979,8 +10979,8 @@ Patterns.cs: #-----| no-match -> [no-match] { ... } # 95| access to constant B -#-----| no-match -> [no-match] ... or ... #-----| match -> [match] ... or ... +#-----| no-match -> [no-match] ... or ... # 96| {...} #-----| -> ...; @@ -11039,8 +11039,8 @@ PostDominance.cs: #-----| true -> return ...; # 12| null -#-----| no-match -> [false] ... is ... #-----| match -> [true] ... is ... +#-----| no-match -> [false] ... is ... # 13| return ...; #-----| return -> exit M2 (normal) @@ -11081,8 +11081,8 @@ PostDominance.cs: #-----| true -> nameof(...) # 19| null -#-----| no-match -> [false] ... is ... #-----| match -> [true] ... is ... +#-----| no-match -> [false] ... is ... # 20| throw ...; #-----| exception(ArgumentNullException) -> exit M3 (abnormal) @@ -11402,8 +11402,8 @@ Switch.cs: #-----| -> String s # 24| String s -#-----| no-match -> case ...: #-----| match -> access to local variable s +#-----| no-match -> case ...: # 24| access to local variable s #-----| -> access to property Length @@ -11516,15 +11516,15 @@ Switch.cs: #-----| -> access to type Boolean # 50| access to type Boolean -#-----| match -> access to parameter o #-----| no-match -> exit M4 (normal) +#-----| match -> access to parameter o # 50| access to parameter o #-----| -> null # 50| ... != ... -#-----| true -> break; #-----| false -> exit M4 (normal) +#-----| true -> break; # 50| null #-----| -> ... != ... @@ -11600,8 +11600,8 @@ Switch.cs: #-----| -> "" # 72| "" -#-----| match -> break; #-----| no-match -> exit M6 (normal) +#-----| match -> break; # 73| break; #-----| break -> exit M6 (normal) @@ -11801,8 +11801,8 @@ Switch.cs: #-----| -> 3 # 117| 3 -#-----| no-match -> case ...: #-----| match -> access to parameter s +#-----| no-match -> case ...: # 117| access to parameter s #-----| -> "foo" @@ -11824,8 +11824,8 @@ Switch.cs: #-----| -> 2 # 118| 2 -#-----| no-match -> 1 #-----| match -> access to parameter s +#-----| no-match -> 1 # 118| access to parameter s #-----| -> "fu" @@ -12097,8 +12097,8 @@ Switch.cs: #-----| -> ... => ... # 156| false -#-----| match -> "b" #-----| exception(InvalidOperationException) -> exit M15 (abnormal) +#-----| match -> "b" # 156| ... => ... #-----| -> ... switch { ... } @@ -12192,8 +12192,8 @@ TypeAccesses.cs: #-----| true -> ; # 7| Int32 j -#-----| no-match -> [false] ... is ... #-----| match -> [true] ... is ... +#-----| no-match -> [false] ... is ... # 7| ; #-----| -> ... ...; @@ -12503,8 +12503,8 @@ cflow.cs: #-----| -> 20 # 24| ... <= ... -#-----| true -> {...} #-----| false -> exit Main (normal) +#-----| true -> {...} # 24| 20 #-----| -> ... <= ... @@ -12791,8 +12791,8 @@ cflow.cs: #-----| -> access to field Field # 63| ... == ... -#-----| true -> [false] !... #-----| false -> [true] !... +#-----| true -> [false] !... # 63| "" #-----| -> ... == ... @@ -13042,8 +13042,8 @@ cflow.cs: #-----| -> null # 102| ... != ... -#-----| true -> ...; #-----| false -> exit M3 (normal) +#-----| true -> ...; # 102| null #-----| -> ... != ... @@ -13536,8 +13536,8 @@ cflow.cs: #-----| -> 10 # 173| ... < ... -#-----| true -> {...} #-----| false -> exit For (normal) +#-----| true -> {...} # 173| access to local variable j #-----| -> ... + ... @@ -13853,8 +13853,8 @@ cflow.cs: #-----| -> 0 # 200| ... == ... -#-----| true -> [false] !... #-----| false -> [true] !... +#-----| true -> [false] !... # 200| 0 #-----| -> ... == ... @@ -14007,8 +14007,8 @@ cflow.cs: #-----| -> 10 # 221| ... < ... -#-----| true -> {...} #-----| false -> exit Do (normal) +#-----| true -> {...} # 221| 10 #-----| -> ... < ... @@ -14025,8 +14025,8 @@ cflow.cs: #-----| -> "a" # 226| foreach (... ... in ...) ... -#-----| non-empty -> String x #-----| empty -> exit Foreach (normal) +#-----| non-empty -> String x # 226| String x #-----| -> {...} @@ -14153,8 +14153,8 @@ cflow.cs: #-----| -> 0 # 242| ... == ... -#-----| true -> [false] !... #-----| false -> [true] !... +#-----| true -> [false] !... # 242| 0 #-----| -> ... == ... @@ -14440,8 +14440,8 @@ cflow.cs: #-----| -> 0 # 300| ... > ... -#-----| true -> [false] !... #-----| false -> [true] !... +#-----| true -> [false] !... # 300| 0 #-----| -> ... > ... diff --git a/csharp/ql/test/library-tests/conversion/boxing/Boxing.expected b/csharp/ql/test/library-tests/conversion/boxing/Boxing.expected index 7f45e10ec8b..e3484892c48 100644 --- a/csharp/ql/test/library-tests/conversion/boxing/Boxing.expected +++ b/csharp/ql/test/library-tests/conversion/boxing/Boxing.expected @@ -5,10 +5,34 @@ | Boolean | Object | | Boolean | ValueType | | Boolean | dynamic | +| Char | IAdditionOperators | +| Char | IAdditiveIdentity | +| Char | IBinaryInteger | +| Char | IBinaryNumber | +| Char | IBitwiseOperators | | Char | IComparable | | Char | IComparable | +| Char | IComparisonOperators | | Char | IConvertible | +| Char | IDecrementOperators | +| Char | IDivisionOperators | +| Char | IEqualityOperators | | Char | IEquatable | +| Char | IFormattable | +| Char | IIncrementOperators | +| Char | IMinMaxValue | +| Char | IModulusOperators | +| Char | IMultiplicativeIdentity | +| Char | IMultiplyOperators | +| Char | INumber | +| Char | IParseable | +| Char | IShiftOperators | +| Char | ISpanFormattable | +| Char | ISpanParseable | +| Char | ISubtractionOperators | +| Char | IUnaryNegationOperators | +| Char | IUnaryPlusOperators | +| Char | IUnsignedNumber | | Char | Object | | Char | ValueType | | Char | dynamic | @@ -16,21 +40,65 @@ | E | Object | | E | ValueType | | E | dynamic | +| Int32 | IAdditionOperators | +| Int32 | IAdditiveIdentity | +| Int32 | IBinaryInteger | +| Int32 | IBinaryNumber | +| Int32 | IBitwiseOperators | | Int32 | IComparable | | Int32 | IComparable | +| Int32 | IComparisonOperators | | Int32 | IConvertible | +| Int32 | IDecrementOperators | +| Int32 | IDivisionOperators | +| Int32 | IEqualityOperators | | Int32 | IEquatable | | Int32 | IFormattable | +| Int32 | IIncrementOperators | +| Int32 | IMinMaxValue | +| Int32 | IModulusOperators | +| Int32 | IMultiplicativeIdentity | +| Int32 | IMultiplyOperators | +| Int32 | INumber | +| Int32 | IParseable | +| Int32 | IShiftOperators | +| Int32 | ISignedNumber | | Int32 | ISpanFormattable | +| Int32 | ISpanParseable | +| Int32 | ISubtractionOperators | +| Int32 | IUnaryNegationOperators | +| Int32 | IUnaryPlusOperators | | Int32 | Object | | Int32 | ValueType | | Int32 | dynamic | +| Nullable | IAdditionOperators | +| Nullable | IAdditiveIdentity | +| Nullable | IBinaryInteger | +| Nullable | IBinaryNumber | +| Nullable | IBitwiseOperators | | Nullable | IComparable | | Nullable | IComparable | +| Nullable | IComparisonOperators | | Nullable | IConvertible | +| Nullable | IDecrementOperators | +| Nullable | IDivisionOperators | +| Nullable | IEqualityOperators | | Nullable | IEquatable | | Nullable | IFormattable | +| Nullable | IIncrementOperators | +| Nullable | IMinMaxValue | +| Nullable | IModulusOperators | +| Nullable | IMultiplicativeIdentity | +| Nullable | IMultiplyOperators | +| Nullable | INumber | +| Nullable | IParseable | +| Nullable | IShiftOperators | +| Nullable | ISignedNumber | | Nullable | ISpanFormattable | +| Nullable | ISpanParseable | +| Nullable | ISubtractionOperators | +| Nullable | IUnaryNegationOperators | +| Nullable | IUnaryPlusOperators | | Nullable | Object | | Nullable | ValueType | | Nullable | dynamic | diff --git a/csharp/ql/test/library-tests/conversion/reftype/RefType.expected b/csharp/ql/test/library-tests/conversion/reftype/RefType.expected index 88f34c17293..3094984c98d 100644 --- a/csharp/ql/test/library-tests/conversion/reftype/RefType.expected +++ b/csharp/ql/test/library-tests/conversion/reftype/RefType.expected @@ -1,7 +1,5 @@ | Byte[] | Object | | Byte[] | dynamic | -| Byte[][] | Object | -| Byte[][] | dynamic | | C1 | Object | | C1 | dynamic | | C1[] | ICollection | @@ -233,7 +231,6 @@ | UInt64[] | dynamic | | dynamic | Object | | null | Byte[] | -| null | Byte[][] | | null | C1 | | null | C1[] | | null | C2 | diff --git a/csharp/ql/test/library-tests/csharp10/Lambda.cs b/csharp/ql/test/library-tests/csharp10/Lambda.cs new file mode 100644 index 00000000000..28f377033a0 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/Lambda.cs @@ -0,0 +1,20 @@ +using System; + +public class Lambda +{ + public void M1() + { + // Examples need for implicitly typed lambdas. + Func f1 = (int x) => x.ToString(); + var f2 = (int x) => x.ToString(); + + // Examples need for explicit return type for implicitly and explicitly typed lambda. + var f3 = object (bool b) => b ? "1" : 0; + Func f4 = object (bool b) => b ? "1" : 0; + + // Examples needed for explicit return type for downcast. + var f5 = int (bool b) => b ? 1 : 0; + var f6 = object (bool b) => b ? 1 : 0; + } +} + diff --git a/csharp/ql/test/library-tests/csharp10/LambdaAttributes.cs b/csharp/ql/test/library-tests/csharp10/LambdaAttributes.cs new file mode 100644 index 00000000000..0dff83a8885 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/LambdaAttributes.cs @@ -0,0 +1,18 @@ +using System; + +public class Example : Attribute +{ + public Example(int x) { } +} + +public class LambdaAttributes +{ + + public void M1() + { + // Examples needed for attributes. + var f7 = ([Example(1)] int x) => x.ToString(); // Parameter attribute + var f8 =[Example(2)] (int x) => x.ToString(); // Lambda attribute + var f9 =[return: Example(3)] (int x) => x.ToString(); // Return value attribute + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/csharp10/PropertyPatterns.cs b/csharp/ql/test/library-tests/csharp10/PropertyPatterns.cs new file mode 100644 index 00000000000..aa4f0f6d78d --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/PropertyPatterns.cs @@ -0,0 +1,56 @@ +using System; + +public record Point(int X, int Y); +public record Line(Point P1, Point P2); +public record Wrap(Line L); + +public class PropertyPatterns +{ + private static Line l = new Line(new Point(1, 2), new Point(3, 6)); + private static Wrap w = new Wrap(l); + + public void M1() + { + if (l is { P1: { X: 1 } }) + { + } + + if (l is { P1.X: 2 }) + { + } + } + + public void M2() + { + if (w is { L: { P2: { Y: 3 } } }) + { + } + + if (w is { L.P2.Y: 4 }) + { + } + } + + public void M3() + { + if (w is { L: { P2.Y: 5 } }) + { + } + + if (w is { L.P2: { Y: 6 } }) + { + } + } + + public void M4() + { + if (l is { P1: { X: 7 }, P1: { Y: 8 } }) + { + } + + if (l is { P1.X: 9, P1.Y: 10 }) + { + } + } +} + diff --git a/csharp/ql/test/library-tests/csharp10/Tuples.cs b/csharp/ql/test/library-tests/csharp10/Tuples.cs new file mode 100644 index 00000000000..fa1adce50f1 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/Tuples.cs @@ -0,0 +1,27 @@ +using System; + +public class Deconstruction +{ + public void M1() + { + // Declaration and Assignment + (int x1, int y1) = (10, 11); + + // Assignment + int x2 = 0; + int y2 = 0; + (x2, y2) = (20, 21); + + // Mixed + int y3 = 0; + (int x3, y3) = (30, 31); + + int x4 = 0; + (x4, int y4) = (40, 41); + + // Nested, Mixed + int x5 = 0; + int y51 = 0; + (x5, (int y50, y51)) = (50, (51, 52)); + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/csharp10/lambda.expected b/csharp/ql/test/library-tests/csharp10/lambda.expected new file mode 100644 index 00000000000..64db00fa57f --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/lambda.expected @@ -0,0 +1,23 @@ +lambdaDeclaration +| Func | Lambda.cs:16:13:16:14 | f5 | Lambda.cs:16:18:16:42 | (...) => ... | +| Func | Lambda.cs:12:13:12:14 | f3 | Lambda.cs:12:18:12:47 | (...) => ... | +| Func | Lambda.cs:13:28:13:29 | f4 | Lambda.cs:13:33:13:62 | (...) => ... | +| Func | Lambda.cs:17:13:17:14 | f6 | Lambda.cs:17:18:17:45 | (...) => ... | +| Func | Lambda.cs:8:27:8:28 | f1 | Lambda.cs:8:32:8:54 | (...) => ... | +| Func | Lambda.cs:9:13:9:14 | f2 | Lambda.cs:9:18:9:40 | (...) => ... | +| Func | LambdaAttributes.cs:14:13:14:14 | f7 | LambdaAttributes.cs:14:18:14:53 | (...) => ... | +| Func | LambdaAttributes.cs:15:13:15:14 | f8 | LambdaAttributes.cs:15:17:15:52 | (...) => ... | +| Func | LambdaAttributes.cs:16:13:16:14 | f9 | LambdaAttributes.cs:16:17:16:60 | (...) => ... | +lambdaDeclarationNatural +| Func | Lambda.cs:16:13:16:14 | f5 | Lambda.cs:16:18:16:42 | (...) => ... | +| Func | Lambda.cs:12:13:12:14 | f3 | Lambda.cs:12:18:12:47 | (...) => ... | +| Func | Lambda.cs:17:13:17:14 | f6 | Lambda.cs:17:18:17:45 | (...) => ... | +| Func | Lambda.cs:9:13:9:14 | f2 | Lambda.cs:9:18:9:40 | (...) => ... | +| Func | LambdaAttributes.cs:14:13:14:14 | f7 | LambdaAttributes.cs:14:18:14:53 | (...) => ... | +| Func | LambdaAttributes.cs:15:13:15:14 | f8 | LambdaAttributes.cs:15:17:15:52 | (...) => ... | +| Func | LambdaAttributes.cs:16:13:16:14 | f9 | LambdaAttributes.cs:16:17:16:60 | (...) => ... | +lambdaDeclarationExplicitReturnType +| Func | int | int | Lambda.cs:16:13:16:14 | f5 | Lambda.cs:16:18:16:42 | (...) => ... | +| Func | object | object | Lambda.cs:12:13:12:14 | f3 | Lambda.cs:12:18:12:47 | (...) => ... | +| Func | object | object | Lambda.cs:13:28:13:29 | f4 | Lambda.cs:13:33:13:62 | (...) => ... | +| Func | object | object | Lambda.cs:17:13:17:14 | f6 | Lambda.cs:17:18:17:45 | (...) => ... | diff --git a/csharp/ql/test/library-tests/csharp10/lambda.ql b/csharp/ql/test/library-tests/csharp10/lambda.ql new file mode 100644 index 00000000000..3cfec302b52 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/lambda.ql @@ -0,0 +1,25 @@ +import csharp + +private predicate getLambda( + LocalVariableDeclAndInitExpr e, string type, LocalVariable v, LambdaExpr lexp +) { + lexp = e.getRValue() and + v = e.getTargetVariable() and + type = e.getType().toStringWithTypes() +} + +query predicate lambdaDeclaration(string type, LocalVariable v, LambdaExpr lexp) { + getLambda(_, type, v, lexp) +} + +query predicate lambdaDeclarationNatural(string type, LocalVariable v, LambdaExpr lexp) { + exists(LocalVariableDeclAndInitExpr e | getLambda(e, type, v, lexp) and e.isImplicitlyTyped()) +} + +query predicate lambdaDeclarationExplicitReturnType( + string type, string explicit, string actual, LocalVariable v, LambdaExpr lexp +) { + getLambda(_, type, v, lexp) and + explicit = lexp.getExplicitReturnType().toStringWithTypes() and + actual = lexp.getReturnType().toStringWithTypes() +} diff --git a/csharp/ql/test/library-tests/csharp10/lambdaAttributes.expected b/csharp/ql/test/library-tests/csharp10/lambdaAttributes.expected new file mode 100644 index 00000000000..db901accfb5 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/lambdaAttributes.expected @@ -0,0 +1,7 @@ +allAttributes +| LambdaAttributes.cs:14:20:14:26 | [Example(...)] | LambdaAttributes.cs:14:28:14:28 | 1 | Parameter | +| LambdaAttributes.cs:15:18:15:24 | [Example(...)] | LambdaAttributes.cs:15:26:15:26 | 2 | LambdaExpr | +| LambdaAttributes.cs:16:26:16:32 | [return: Example(...)] | LambdaAttributes.cs:16:34:16:34 | 3 | LambdaExpr | +lambdaAttributes +| LambdaAttributes.cs:15:18:15:24 | [Example(...)] | LambdaAttributes.cs:15:26:15:26 | 2 | LambdaAttributes.cs:15:17:15:52 | (...) => ... | +| LambdaAttributes.cs:16:26:16:32 | [return: Example(...)] | LambdaAttributes.cs:16:34:16:34 | 3 | LambdaAttributes.cs:16:17:16:60 | (...) => ... | diff --git a/csharp/ql/test/library-tests/csharp10/lambdaAttributes.ql b/csharp/ql/test/library-tests/csharp10/lambdaAttributes.ql new file mode 100644 index 00000000000..3c47ccb643d --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/lambdaAttributes.ql @@ -0,0 +1,11 @@ +import csharp + +query predicate allAttributes(Attribute a, Expr arg, string c) { + a.fromSource() and + arg = a.getArgument(0) and + c = a.getTarget().(Element).getAPrimaryQlClass() +} + +query predicate lambdaAttributes(Attribute a, Expr arg, LambdaExpr l) { + allAttributes(a, arg, _) and a.getTarget() = l +} diff --git a/csharp/ql/test/library-tests/csharp10/propertyPatterns.expected b/csharp/ql/test/library-tests/csharp10/propertyPatterns.expected new file mode 100644 index 00000000000..c7ed5b45730 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/propertyPatterns.expected @@ -0,0 +1,73 @@ +propertyPatterns +| PropertyPatterns.cs:14:18:14:33 | { ... } | +| PropertyPatterns.cs:14:24:14:31 | { ... } | +| PropertyPatterns.cs:18:18:18:28 | { ... } | +| PropertyPatterns.cs:18:20:18:21 | { ... } | +| PropertyPatterns.cs:25:18:25:40 | { ... } | +| PropertyPatterns.cs:25:23:25:38 | { ... } | +| PropertyPatterns.cs:25:29:25:36 | { ... } | +| PropertyPatterns.cs:29:18:29:30 | { ... } | +| PropertyPatterns.cs:29:20:29:20 | { ... } | +| PropertyPatterns.cs:29:22:29:23 | { ... } | +| PropertyPatterns.cs:36:18:36:35 | { ... } | +| PropertyPatterns.cs:36:23:36:33 | { ... } | +| PropertyPatterns.cs:36:25:36:26 | { ... } | +| PropertyPatterns.cs:40:18:40:35 | { ... } | +| PropertyPatterns.cs:40:20:40:20 | { ... } | +| PropertyPatterns.cs:40:26:40:33 | { ... } | +| PropertyPatterns.cs:47:18:47:47 | { ... } | +| PropertyPatterns.cs:47:24:47:31 | { ... } | +| PropertyPatterns.cs:47:38:47:45 | { ... } | +| PropertyPatterns.cs:51:18:51:38 | { ... } | +| PropertyPatterns.cs:51:20:51:21 | { ... } | +| PropertyPatterns.cs:51:29:51:30 | { ... } | +propertyPatternChild +| PropertyPatterns.cs:14:18:14:33 | { ... } | 0 | PropertyPatterns.cs:14:24:14:31 | { ... } | +| PropertyPatterns.cs:14:24:14:31 | { ... } | 0 | PropertyPatterns.cs:14:29:14:29 | 1 | +| PropertyPatterns.cs:18:18:18:28 | { ... } | 0 | PropertyPatterns.cs:18:20:18:21 | { ... } | +| PropertyPatterns.cs:18:20:18:21 | { ... } | 0 | PropertyPatterns.cs:18:26:18:26 | 2 | +| PropertyPatterns.cs:25:18:25:40 | { ... } | 0 | PropertyPatterns.cs:25:23:25:38 | { ... } | +| PropertyPatterns.cs:25:23:25:38 | { ... } | 0 | PropertyPatterns.cs:25:29:25:36 | { ... } | +| PropertyPatterns.cs:25:29:25:36 | { ... } | 0 | PropertyPatterns.cs:25:34:25:34 | 3 | +| PropertyPatterns.cs:29:18:29:30 | { ... } | 0 | PropertyPatterns.cs:29:20:29:20 | { ... } | +| PropertyPatterns.cs:29:20:29:20 | { ... } | 0 | PropertyPatterns.cs:29:22:29:23 | { ... } | +| PropertyPatterns.cs:29:22:29:23 | { ... } | 0 | PropertyPatterns.cs:29:28:29:28 | 4 | +| PropertyPatterns.cs:36:18:36:35 | { ... } | 0 | PropertyPatterns.cs:36:23:36:33 | { ... } | +| PropertyPatterns.cs:36:23:36:33 | { ... } | 0 | PropertyPatterns.cs:36:25:36:26 | { ... } | +| PropertyPatterns.cs:36:25:36:26 | { ... } | 0 | PropertyPatterns.cs:36:31:36:31 | 5 | +| PropertyPatterns.cs:40:18:40:35 | { ... } | 0 | PropertyPatterns.cs:40:20:40:20 | { ... } | +| PropertyPatterns.cs:40:20:40:20 | { ... } | 0 | PropertyPatterns.cs:40:26:40:33 | { ... } | +| PropertyPatterns.cs:40:26:40:33 | { ... } | 0 | PropertyPatterns.cs:40:31:40:31 | 6 | +| PropertyPatterns.cs:47:18:47:47 | { ... } | 0 | PropertyPatterns.cs:47:24:47:31 | { ... } | +| PropertyPatterns.cs:47:18:47:47 | { ... } | 1 | PropertyPatterns.cs:47:38:47:45 | { ... } | +| PropertyPatterns.cs:47:24:47:31 | { ... } | 0 | PropertyPatterns.cs:47:29:47:29 | 7 | +| PropertyPatterns.cs:47:38:47:45 | { ... } | 0 | PropertyPatterns.cs:47:43:47:43 | 8 | +| PropertyPatterns.cs:51:18:51:38 | { ... } | 0 | PropertyPatterns.cs:51:20:51:21 | { ... } | +| PropertyPatterns.cs:51:18:51:38 | { ... } | 1 | PropertyPatterns.cs:51:29:51:30 | { ... } | +| PropertyPatterns.cs:51:20:51:21 | { ... } | 0 | PropertyPatterns.cs:51:26:51:26 | 9 | +| PropertyPatterns.cs:51:29:51:30 | { ... } | 0 | PropertyPatterns.cs:51:35:51:36 | 10 | +propertyPatternLabels +| PropertyPatterns.cs:14:24:14:31 | { ... } | P1 | +| PropertyPatterns.cs:14:29:14:29 | 1 | X | +| PropertyPatterns.cs:18:20:18:21 | { ... } | P1 | +| PropertyPatterns.cs:18:26:18:26 | 2 | X | +| PropertyPatterns.cs:25:23:25:38 | { ... } | L | +| PropertyPatterns.cs:25:29:25:36 | { ... } | P2 | +| PropertyPatterns.cs:25:34:25:34 | 3 | Y | +| PropertyPatterns.cs:29:20:29:20 | { ... } | L | +| PropertyPatterns.cs:29:22:29:23 | { ... } | P2 | +| PropertyPatterns.cs:29:28:29:28 | 4 | Y | +| PropertyPatterns.cs:36:23:36:33 | { ... } | L | +| PropertyPatterns.cs:36:25:36:26 | { ... } | P2 | +| PropertyPatterns.cs:36:31:36:31 | 5 | Y | +| PropertyPatterns.cs:40:20:40:20 | { ... } | L | +| PropertyPatterns.cs:40:26:40:33 | { ... } | P2 | +| PropertyPatterns.cs:40:31:40:31 | 6 | Y | +| PropertyPatterns.cs:47:24:47:31 | { ... } | P1 | +| PropertyPatterns.cs:47:29:47:29 | 7 | X | +| PropertyPatterns.cs:47:38:47:45 | { ... } | P1 | +| PropertyPatterns.cs:47:43:47:43 | 8 | Y | +| PropertyPatterns.cs:51:20:51:21 | { ... } | P1 | +| PropertyPatterns.cs:51:26:51:26 | 9 | X | +| PropertyPatterns.cs:51:29:51:30 | { ... } | P1 | +| PropertyPatterns.cs:51:35:51:36 | 10 | Y | diff --git a/csharp/ql/test/library-tests/csharp10/propertyPatterns.ql b/csharp/ql/test/library-tests/csharp10/propertyPatterns.ql new file mode 100644 index 00000000000..7dfbb323435 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/propertyPatterns.ql @@ -0,0 +1,11 @@ +import csharp + +query predicate propertyPatterns(PropertyPatternExpr exp) { any() } + +query predicate propertyPatternChild(PropertyPatternExpr pp, int n, PatternExpr child) { + child = pp.getPattern(n) +} + +query predicate propertyPatternLabels(LabeledPatternExpr exp, string label) { + label = exp.getLabel() +} diff --git a/csharp/ql/test/library-tests/csharp10/recordTypes.expected b/csharp/ql/test/library-tests/csharp10/recordTypes.expected index 786d42c8d71..56c71faff85 100644 --- a/csharp/ql/test/library-tests/csharp10/recordTypes.expected +++ b/csharp/ql/test/library-tests/csharp10/recordTypes.expected @@ -1,4 +1,7 @@ recordTypes +| PropertyPatterns.cs:3:1:3:34 | Point | +| PropertyPatterns.cs:4:1:4:39 | Line | +| PropertyPatterns.cs:5:1:5:27 | Wrap | | RecordTypes.cs:3:1:6:2 | MyEntry | | RecordTypes.cs:8:1:8:53 | MyClassRecord | | RecordTypes.cs:10:1:10:70 | MyReadonlyRecordStruct | @@ -9,5 +12,8 @@ recordStructs | RecordTypes.cs:12:1:12:51 | MyRecordStruct1 | | WithExpression.cs:9:1:9:47 | MyRecordStruct2 | recordClass +| PropertyPatterns.cs:3:1:3:34 | Point | +| PropertyPatterns.cs:4:1:4:39 | Line | +| PropertyPatterns.cs:5:1:5:27 | Wrap | | RecordTypes.cs:3:1:6:2 | MyEntry | | RecordTypes.cs:8:1:8:53 | MyClassRecord | diff --git a/csharp/ql/test/library-tests/csharp10/tuples.expected b/csharp/ql/test/library-tests/csharp10/tuples.expected new file mode 100644 index 00000000000..3e2afb9f671 --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/tuples.expected @@ -0,0 +1,18 @@ +declarations +| Tuples.cs:8:14:8:15 | Int32 x1 | +| Tuples.cs:8:22:8:23 | Int32 y1 | +| Tuples.cs:17:14:17:15 | Int32 x3 | +| Tuples.cs:20:18:20:19 | Int32 y4 | +| Tuples.cs:25:19:25:21 | Int32 y50 | +assignments +| Tuples.cs:8:9:8:35 | ... = ... | Tuples.cs:8:14:8:15 | x1 | 0 | +| Tuples.cs:8:9:8:35 | ... = ... | Tuples.cs:8:22:8:23 | y1 | 1 | +| Tuples.cs:13:9:13:27 | ... = ... | Tuples.cs:11:13:11:14 | x2 | 0 | +| Tuples.cs:13:9:13:27 | ... = ... | Tuples.cs:12:13:12:14 | y2 | 1 | +| Tuples.cs:17:9:17:31 | ... = ... | Tuples.cs:16:13:16:14 | y3 | 1 | +| Tuples.cs:17:9:17:31 | ... = ... | Tuples.cs:17:14:17:15 | x3 | 0 | +| Tuples.cs:20:9:20:31 | ... = ... | Tuples.cs:19:13:19:14 | x4 | 0 | +| Tuples.cs:20:9:20:31 | ... = ... | Tuples.cs:20:18:20:19 | y4 | 1 | +| Tuples.cs:25:9:25:45 | ... = ... | Tuples.cs:23:13:23:14 | x5 | 0 | +| Tuples.cs:25:9:25:45 | ... = ... | Tuples.cs:24:13:24:15 | y51 | 2 | +| Tuples.cs:25:9:25:45 | ... = ... | Tuples.cs:25:19:25:21 | y50 | 1 | diff --git a/csharp/ql/test/library-tests/csharp10/tuples.ql b/csharp/ql/test/library-tests/csharp10/tuples.ql new file mode 100644 index 00000000000..dff1c96ad8b --- /dev/null +++ b/csharp/ql/test/library-tests/csharp10/tuples.ql @@ -0,0 +1,14 @@ +import csharp + +private predicate relevant(Element e) { e.getFile().getBaseName() = "Tuples.cs" } + +query predicate declarations(LocalVariableDeclExpr d) { + relevant(d) and + d.getParent*() instanceof TupleExpr +} + +query predicate assignments(AssignableDefinitions::TupleAssignmentDefinition t, Assignable a, int o) { + relevant(t.getAssignment()) and + a = t.getTarget() and + o = t.getEvaluationOrder() +} diff --git a/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected b/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected index b43376eb2d5..932a51a6f73 100644 --- a/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected +++ b/csharp/ql/test/library-tests/csharp9/FunctionPointer.expected @@ -5,11 +5,17 @@ type | file://:0:0:0:0 | delegate* default | readonly int | DefaultCallingConvention | | file://:0:0:0:0 | delegate* default | Void* | DefaultCallingConvention | | file://:0:0:0:0 | delegate* default | int | DefaultCallingConvention | -| file://:0:0:0:0 | delegate* default | Void | DefaultCallingConvention | +| file://:0:0:0:0 | delegate* default | Void | DefaultCallingConvention | +| file://:0:0:0:0 | delegate* default | Void | DefaultCallingConvention | | file://:0:0:0:0 | delegate* default | int | DefaultCallingConvention | | file://:0:0:0:0 | delegate* default | int* | DefaultCallingConvention | +| file://:0:0:0:0 | delegate* default | object | DefaultCallingConvention | | file://:0:0:0:0 | delegate* stdcall | Void | StdCallCallingConvention | | file://:0:0:0:0 | delegate* unmanaged | Void | CallingConvention | +| file://:0:0:0:0 | delegate* unmanaged | int | CallingConvention | +| file://:0:0:0:0 | delegate* unmanaged | int | CallingConvention | +| file://:0:0:0:0 | delegate* unmanaged | Void | CallingConvention | +| file://:0:0:0:0 | delegate* unmanaged | Void | CallingConvention | unmanagedCallingConvention parameter | file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | A | @@ -20,16 +26,22 @@ parameter | file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | ref int! | | file://:0:0:0:0 | delegate* default | 1 | file://:0:0:0:0 | `1 | out object? | | file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | int*! | -| file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | IntPtr! | -| file://:0:0:0:0 | delegate* default | 1 | file://:0:0:0:0 | `1 | IntPtr! | -| file://:0:0:0:0 | delegate* default | 2 | file://:0:0:0:0 | `2 | IntPtr*! | +| file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | IntPtr! | +| file://:0:0:0:0 | delegate* default | 1 | file://:0:0:0:0 | `1 | IntPtr! | +| file://:0:0:0:0 | delegate* default | 2 | file://:0:0:0:0 | `2 | PortableTailCallFrame*! | +| file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | object | | file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | T | | file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | Void*! | +| file://:0:0:0:0 | delegate* default | 0 | file://:0:0:0:0 | | Void*! | | file://:0:0:0:0 | delegate* stdcall | 0 | file://:0:0:0:0 | | ref int! | | file://:0:0:0:0 | delegate* stdcall | 1 | file://:0:0:0:0 | `1 | out object? | | file://:0:0:0:0 | delegate* stdcall | 2 | file://:0:0:0:0 | `2 | T | | file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | char*! | | file://:0:0:0:0 | delegate* unmanaged | 1 | file://:0:0:0:0 | `1 | IntPtr! | +| file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | int! | +| file://:0:0:0:0 | delegate* unmanaged | 1 | file://:0:0:0:0 | `1 | PosixSignal! | +| file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | IntPtr! | +| file://:0:0:0:0 | delegate* unmanaged | 0 | file://:0:0:0:0 | | IntPtr! | invocation | FunctionPointer.cs:17:21:17:43 | function pointer call | | FunctionPointer.cs:23:13:23:44 | function pointer call | diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index e346a782c4f..3c708935143 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -583,13 +583,13 @@ LocalFunction.cs: # 21| 0: [LocalFunctionStmt] dup(...) # 21| 0: [LocalFunction] dup #-----| 0: (Attributes) -# 21| 1: [Attribute] [Obsolete(...)] +# 21| 1: [DefaultAttribute] [Obsolete(...)] # 21| 0: [TypeMention] ObsoleteAttribute #-----| 2: (Parameters) # 22| 0: [Parameter] b # 22| -1: [TypeMention] bool #-----| 0: (Attributes) -# 22| 1: [Attribute] [NotNullWhen(...)] +# 22| 1: [DefaultAttribute] [NotNullWhen(...)] # 22| -1: [TypeMention] NotNullWhenAttribute # 22| 0: [BoolLiteral] true # 22| 1: [Parameter] i diff --git a/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected new file mode 100644 index 00000000000..f965891244c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.expected @@ -0,0 +1,5 @@ +failures +edges +nodes +subpaths +#select diff --git a/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql new file mode 100644 index 00000000000..55578cf970c --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/patterns/PatternFlow.ql @@ -0,0 +1,11 @@ +/** + * @kind path-problem + */ + +import csharp +import DataFlow::PathGraph +import TestUtilities.InlineFlowTest + +from DataFlow::PathNode source, DataFlow::PathNode sink, DefaultValueFlowConf conf +where conf.hasFlowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/patterns/Patterns.cs b/csharp/ql/test/library-tests/dataflow/patterns/Patterns.cs new file mode 100644 index 00000000000..d3247e1351b --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/patterns/Patterns.cs @@ -0,0 +1,54 @@ +using System; + +public record class RecordClass2(object Prop) { } + +public record class Nested(RecordClass2 Record) { } + +public class RecordPatterns +{ + private void M1() + { + var o = Source(1); + var r = new RecordClass2(o); + if (r is RecordClass2 { Prop: object p }) + { + Sink(p); // $ MISSING: hasValueFlow=1 + } + } + + private void M2() + { + var o = Source(2); + var r = new RecordClass2(o); + switch (r) + { + case RecordClass2 { Prop: object p }: + Sink(p); // $ MISSING: hasValueFlow=2 + break; + } + } + + private void M3() + { + var o = Source(3); + var s = new Nested(new RecordClass2(o)); + if (s is Nested { Record: { Prop: object p } }) + { + Sink(p); // $ MISSING: hasValueFlow=3 + } + } + + private void M4() + { + var o = Source(4); + var s = new Nested(new RecordClass2(o)); + if (s is Nested { Record.Prop: object p }) + { + Sink(p); // $ MISSING: hasValueFlow=4 + } + } + + public static void Sink(object o) { } + + static T Source(object source) => throw null; +} diff --git a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected index 2c457546eb3..bf41a804fdb 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected @@ -1,111 +1,172 @@ -| Tuples.cs:7:13:7:56 | SSA def(x) | Tuples.cs:8:27:8:27 | access to local variable x | -| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item1) | Tuples.cs:23:14:23:20 | access to field Item1 | -| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item2) | Tuples.cs:25:14:25:20 | access to field Item2 | -| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item2.Item1) | Tuples.cs:25:14:25:26 | access to field Item1 | -| Tuples.cs:7:13:7:56 | SSA qualifier def(x.Item2.Item2) | Tuples.cs:26:14:26:26 | access to field Item2 | -| Tuples.cs:7:17:7:56 | (..., ...) | Tuples.cs:7:13:7:56 | SSA def(x) | -| Tuples.cs:8:9:8:27 | SSA def(a) | Tuples.cs:9:14:9:14 | access to local variable a | -| Tuples.cs:8:9:8:27 | SSA def(b) | Tuples.cs:10:14:10:14 | access to local variable b | -| Tuples.cs:8:9:8:27 | SSA def(c) | Tuples.cs:11:14:11:14 | access to local variable c | -| Tuples.cs:8:27:8:27 | access to local variable x | Tuples.cs:8:9:8:23 | (..., ...) | -| Tuples.cs:8:27:8:27 | access to local variable x | Tuples.cs:13:23:13:23 | access to local variable x | -| Tuples.cs:13:9:13:23 | SSA def(a) | Tuples.cs:14:14:14:14 | access to local variable a | -| Tuples.cs:13:9:13:23 | SSA def(b) | Tuples.cs:15:14:15:14 | access to local variable b | -| Tuples.cs:13:9:13:23 | SSA def(c) | Tuples.cs:16:14:16:14 | access to local variable c | -| Tuples.cs:13:23:13:23 | access to local variable x | Tuples.cs:13:9:13:19 | (..., ...) | -| Tuples.cs:13:23:13:23 | access to local variable x | Tuples.cs:18:26:18:26 | access to local variable x | -| Tuples.cs:18:9:18:26 | SSA def(p) | Tuples.cs:19:14:19:14 | access to local variable p | -| Tuples.cs:18:9:18:26 | SSA def(q) | Tuples.cs:20:14:20:14 | access to local variable q | -| Tuples.cs:18:9:18:26 | SSA qualifier def(q.Item1) | Tuples.cs:20:14:20:20 | access to field Item1 | -| Tuples.cs:18:9:18:26 | SSA qualifier def(q.Item2) | Tuples.cs:21:14:21:20 | access to field Item2 | -| Tuples.cs:18:26:18:26 | access to local variable x | Tuples.cs:18:9:18:22 | (..., ...) | -| Tuples.cs:18:26:18:26 | access to local variable x | Tuples.cs:23:14:23:14 | access to local variable x | -| Tuples.cs:20:14:20:14 | access to local variable q | Tuples.cs:21:14:21:14 | access to local variable q | -| Tuples.cs:23:14:23:14 | [post] access to local variable x | Tuples.cs:24:14:24:14 | access to local variable x | -| Tuples.cs:23:14:23:14 | access to local variable x | Tuples.cs:24:14:24:14 | access to local variable x | -| Tuples.cs:23:14:23:20 | [post] access to field Item1 | Tuples.cs:24:14:24:16 | access to field Item1 | -| Tuples.cs:23:14:23:20 | access to field Item1 | Tuples.cs:24:14:24:16 | access to field Item1 | -| Tuples.cs:24:14:24:14 | [post] access to local variable x | Tuples.cs:25:14:25:14 | access to local variable x | -| Tuples.cs:24:14:24:14 | access to local variable x | Tuples.cs:25:14:25:14 | access to local variable x | -| Tuples.cs:25:14:25:14 | access to local variable x | Tuples.cs:26:14:26:14 | access to local variable x | -| Tuples.cs:25:14:25:20 | access to field Item2 | Tuples.cs:26:14:26:20 | access to field Item2 | -| Tuples.cs:31:13:31:72 | SSA def(x) | Tuples.cs:32:14:32:14 | access to local variable x | -| Tuples.cs:31:13:31:72 | SSA qualifier def(x.Item1) | Tuples.cs:32:14:32:20 | access to field Item1 | -| Tuples.cs:31:13:31:72 | SSA qualifier def(x.Item2) | Tuples.cs:33:14:33:20 | access to field Item2 | -| Tuples.cs:31:13:31:72 | SSA qualifier def(x.Item10) | Tuples.cs:34:14:34:21 | access to field Item10 | -| Tuples.cs:31:17:31:72 | (..., ...) | Tuples.cs:31:13:31:72 | SSA def(x) | -| Tuples.cs:32:14:32:14 | [post] access to local variable x | Tuples.cs:33:14:33:14 | access to local variable x | -| Tuples.cs:32:14:32:14 | access to local variable x | Tuples.cs:33:14:33:14 | access to local variable x | -| Tuples.cs:33:14:33:14 | access to local variable x | Tuples.cs:34:14:34:14 | access to local variable x | -| Tuples.cs:39:13:39:68 | SSA def(x) | Tuples.cs:40:14:40:14 | access to local variable x | -| Tuples.cs:39:13:39:68 | SSA qualifier def(x.Item1) | Tuples.cs:40:14:40:20 | access to field Item1 | -| Tuples.cs:39:13:39:68 | SSA qualifier def(x.Item2) | Tuples.cs:41:14:41:20 | access to field Item2 | -| Tuples.cs:39:17:39:68 | (...) ... | Tuples.cs:39:13:39:68 | SSA def(x) | -| Tuples.cs:39:47:39:68 | (..., ...) | Tuples.cs:39:17:39:68 | (...) ... | -| Tuples.cs:40:14:40:14 | [post] access to local variable x | Tuples.cs:41:14:41:14 | access to local variable x | -| Tuples.cs:40:14:40:14 | access to local variable x | Tuples.cs:41:14:41:14 | access to local variable x | -| Tuples.cs:43:13:43:68 | SSA def(y) | Tuples.cs:44:14:44:14 | access to local variable y | -| Tuples.cs:43:13:43:68 | SSA qualifier def(y.Item1) | Tuples.cs:44:14:44:20 | access to field Item1 | -| Tuples.cs:43:13:43:68 | SSA qualifier def(y.Item2) | Tuples.cs:45:14:45:20 | access to field Item2 | -| Tuples.cs:43:17:43:68 | (...) ... | Tuples.cs:43:13:43:68 | SSA def(y) | -| Tuples.cs:43:47:43:68 | (...) ... | Tuples.cs:43:17:43:68 | (...) ... | -| Tuples.cs:43:47:43:68 | (..., ...) | Tuples.cs:43:47:43:68 | (...) ... | -| Tuples.cs:44:14:44:14 | [post] access to local variable y | Tuples.cs:45:14:45:14 | access to local variable y | -| Tuples.cs:44:14:44:14 | access to local variable y | Tuples.cs:45:14:45:14 | access to local variable y | -| Tuples.cs:48:27:48:27 | s | Tuples.cs:65:18:65:18 | access to parameter s | -| Tuples.cs:50:13:50:56 | SSA def(x) | Tuples.cs:51:17:51:17 | access to local variable x | -| Tuples.cs:50:17:50:56 | (..., ...) | Tuples.cs:50:13:50:56 | SSA def(x) | -| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:53:18:53:57 | SSA def(t) | -| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:58:18:58:35 | (..., ...) | -| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:58:18:58:35 | (..., ...) | -| Tuples.cs:51:17:51:17 | access to local variable x | Tuples.cs:77:13:77:13 | access to local variable x | -| Tuples.cs:53:18:53:57 | SSA def(t) | Tuples.cs:53:64:53:64 | access to local variable t | -| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item1) | Tuples.cs:54:22:54:28 | access to field Item1 | -| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item2) | Tuples.cs:55:22:55:28 | access to field Item2 | -| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item2.Item1) | Tuples.cs:56:22:56:34 | access to field Item1 | -| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item2.Item2) | Tuples.cs:55:22:55:34 | access to field Item2 | -| Tuples.cs:53:18:53:57 | SSA qualifier def(t.Item3) | Tuples.cs:53:64:53:70 | access to field Item3 | -| Tuples.cs:53:64:53:64 | access to local variable t | Tuples.cs:54:22:54:22 | access to local variable t | -| Tuples.cs:54:22:54:22 | [post] access to local variable t | Tuples.cs:55:22:55:22 | access to local variable t | -| Tuples.cs:54:22:54:22 | access to local variable t | Tuples.cs:55:22:55:22 | access to local variable t | -| Tuples.cs:55:22:55:22 | [post] access to local variable t | Tuples.cs:56:22:56:22 | access to local variable t | -| Tuples.cs:55:22:55:22 | access to local variable t | Tuples.cs:56:22:56:22 | access to local variable t | -| Tuples.cs:55:22:55:28 | [post] access to field Item2 | Tuples.cs:56:22:56:28 | access to field Item2 | -| Tuples.cs:55:22:55:28 | access to field Item2 | Tuples.cs:56:22:56:28 | access to field Item2 | -| Tuples.cs:58:23:58:23 | SSA def(a) | Tuples.cs:59:22:59:22 | access to local variable a | -| Tuples.cs:58:27:58:27 | SSA def(b) | Tuples.cs:61:22:61:22 | access to local variable b | -| Tuples.cs:58:30:58:30 | SSA def(c) | Tuples.cs:60:22:60:22 | access to local variable c | -| Tuples.cs:65:13:65:30 | SSA def(y) | Tuples.cs:66:17:66:17 | access to local variable y | -| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item1) | Tuples.cs:69:22:69:28 | access to field Item1 | -| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item2) | Tuples.cs:70:22:70:28 | access to field Item2 | -| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item2.Item1) | Tuples.cs:72:22:72:34 | access to field Item1 | -| Tuples.cs:65:13:65:30 | SSA qualifier def(y.Item2.Item2) | Tuples.cs:70:22:70:34 | access to field Item2 | -| Tuples.cs:65:17:65:30 | (..., ...) | Tuples.cs:65:13:65:30 | SSA def(y) | -| Tuples.cs:65:18:65:18 | access to parameter s | Tuples.cs:65:25:65:25 | access to parameter s | -| Tuples.cs:66:17:66:17 | access to local variable y | Tuples.cs:68:35:68:44 | (..., ...) | -| Tuples.cs:66:17:66:17 | access to local variable y | Tuples.cs:69:22:69:22 | access to local variable y | -| Tuples.cs:68:40:68:40 | SSA def(b) | Tuples.cs:73:22:73:22 | access to local variable b | -| Tuples.cs:68:43:68:43 | SSA def(c) | Tuples.cs:71:22:71:22 | access to local variable c | -| Tuples.cs:69:22:69:22 | [post] access to local variable y | Tuples.cs:70:22:70:22 | access to local variable y | -| Tuples.cs:69:22:69:22 | access to local variable y | Tuples.cs:70:22:70:22 | access to local variable y | -| Tuples.cs:70:22:70:22 | [post] access to local variable y | Tuples.cs:72:22:72:22 | access to local variable y | -| Tuples.cs:70:22:70:22 | access to local variable y | Tuples.cs:72:22:72:22 | access to local variable y | -| Tuples.cs:70:22:70:28 | [post] access to field Item2 | Tuples.cs:72:22:72:28 | access to field Item2 | -| Tuples.cs:70:22:70:28 | access to field Item2 | Tuples.cs:72:22:72:28 | access to field Item2 | -| Tuples.cs:77:13:77:13 | access to local variable x | Tuples.cs:77:18:77:35 | (..., ...) | -| Tuples.cs:77:13:77:13 | access to local variable x | Tuples.cs:77:18:77:35 | (..., ...) | -| Tuples.cs:77:23:77:23 | SSA def(p) | Tuples.cs:79:18:79:18 | access to local variable p | -| Tuples.cs:77:27:77:27 | SSA def(q) | Tuples.cs:81:18:81:18 | access to local variable q | -| Tuples.cs:77:30:77:30 | SSA def(r) | Tuples.cs:80:18:80:18 | access to local variable r | -| Tuples.cs:89:13:89:41 | SSA def(r) | Tuples.cs:90:14:90:14 | access to local variable r | -| Tuples.cs:89:13:89:41 | SSA qualifier def(r.i) | Tuples.cs:90:14:90:16 | access to property i | -| Tuples.cs:89:17:89:41 | object creation of type R1 | Tuples.cs:89:13:89:41 | SSA def(r) | -| Tuples.cs:90:14:90:14 | [post] access to local variable r | Tuples.cs:92:22:92:22 | access to local variable r | -| Tuples.cs:90:14:90:14 | access to local variable r | Tuples.cs:92:22:92:22 | access to local variable r | -| Tuples.cs:92:9:92:22 | SSA def(a) | Tuples.cs:93:14:93:14 | access to local variable a | -| Tuples.cs:92:9:92:22 | SSA def(b) | Tuples.cs:94:14:94:14 | access to local variable b | -| Tuples.cs:92:22:92:22 | access to local variable r | Tuples.cs:92:9:92:18 | (..., ...) | -| Tuples.cs:92:22:92:22 | access to local variable r | Tuples.cs:96:17:96:17 | access to local variable r | -| Tuples.cs:96:17:96:17 | access to local variable r | Tuples.cs:98:18:98:27 | (..., ...) | -| Tuples.cs:98:23:98:23 | SSA def(x) | Tuples.cs:99:22:99:22 | access to local variable x | -| Tuples.cs:98:26:98:26 | SSA def(y) | Tuples.cs:100:22:100:22 | access to local variable y | +| Tuples.cs:7:13:7:34 | SSA def(o1) | Tuples.cs:10:21:10:22 | access to local variable o1 | +| Tuples.cs:7:18:7:34 | call to method Source | Tuples.cs:7:13:7:34 | SSA def(o1) | +| Tuples.cs:7:33:7:33 | 1 | Tuples.cs:7:33:7:33 | (...) ... | +| Tuples.cs:8:13:8:34 | SSA def(o2) | Tuples.cs:10:29:10:30 | access to local variable o2 | +| Tuples.cs:8:18:8:34 | call to method Source | Tuples.cs:8:13:8:34 | SSA def(o2) | +| Tuples.cs:8:33:8:33 | 2 | Tuples.cs:8:33:8:33 | (...) ... | +| Tuples.cs:10:13:10:32 | SSA def(x) | Tuples.cs:11:27:11:27 | access to local variable x | +| Tuples.cs:10:13:10:32 | SSA qualifier def(x.Item1) | Tuples.cs:26:14:26:20 | access to field Item1 | +| Tuples.cs:10:13:10:32 | SSA qualifier def(x.Item2) | Tuples.cs:28:14:28:20 | access to field Item2 | +| Tuples.cs:10:13:10:32 | SSA qualifier def(x.Item2.Item1) | Tuples.cs:28:14:28:26 | access to field Item1 | +| Tuples.cs:10:13:10:32 | SSA qualifier def(x.Item2.Item2) | Tuples.cs:29:14:29:26 | access to field Item2 | +| Tuples.cs:10:17:10:32 | (..., ...) | Tuples.cs:10:13:10:32 | SSA def(x) | +| Tuples.cs:11:9:11:27 | SSA def(a) | Tuples.cs:12:14:12:14 | access to local variable a | +| Tuples.cs:11:9:11:27 | SSA def(b) | Tuples.cs:13:14:13:14 | access to local variable b | +| Tuples.cs:11:9:11:27 | SSA def(c) | Tuples.cs:14:14:14:14 | access to local variable c | +| Tuples.cs:11:27:11:27 | access to local variable x | Tuples.cs:11:9:11:23 | (..., ...) | +| Tuples.cs:11:27:11:27 | access to local variable x | Tuples.cs:16:23:16:23 | access to local variable x | +| Tuples.cs:13:14:13:14 | access to local variable b | Tuples.cs:13:14:13:14 | (...) ... | +| Tuples.cs:16:9:16:23 | SSA def(a) | Tuples.cs:17:14:17:14 | access to local variable a | +| Tuples.cs:16:9:16:23 | SSA def(b) | Tuples.cs:18:14:18:14 | access to local variable b | +| Tuples.cs:16:9:16:23 | SSA def(c) | Tuples.cs:19:14:19:14 | access to local variable c | +| Tuples.cs:16:23:16:23 | access to local variable x | Tuples.cs:16:9:16:19 | (..., ...) | +| Tuples.cs:16:23:16:23 | access to local variable x | Tuples.cs:21:26:21:26 | access to local variable x | +| Tuples.cs:18:14:18:14 | access to local variable b | Tuples.cs:18:14:18:14 | (...) ... | +| Tuples.cs:21:9:21:26 | SSA def(p) | Tuples.cs:22:14:22:14 | access to local variable p | +| Tuples.cs:21:9:21:26 | SSA def(q) | Tuples.cs:23:14:23:14 | access to local variable q | +| Tuples.cs:21:9:21:26 | SSA qualifier def(q.Item1) | Tuples.cs:23:14:23:20 | access to field Item1 | +| Tuples.cs:21:9:21:26 | SSA qualifier def(q.Item2) | Tuples.cs:24:14:24:20 | access to field Item2 | +| Tuples.cs:21:26:21:26 | access to local variable x | Tuples.cs:21:9:21:22 | (..., ...) | +| Tuples.cs:21:26:21:26 | access to local variable x | Tuples.cs:26:14:26:14 | access to local variable x | +| Tuples.cs:23:14:23:14 | access to local variable q | Tuples.cs:24:14:24:14 | access to local variable q | +| Tuples.cs:23:14:23:20 | access to field Item1 | Tuples.cs:23:14:23:20 | (...) ... | +| Tuples.cs:26:14:26:14 | [post] access to local variable x | Tuples.cs:27:14:27:14 | access to local variable x | +| Tuples.cs:26:14:26:14 | access to local variable x | Tuples.cs:27:14:27:14 | access to local variable x | +| Tuples.cs:26:14:26:20 | [post] access to field Item1 | Tuples.cs:27:14:27:16 | access to field Item1 | +| Tuples.cs:26:14:26:20 | access to field Item1 | Tuples.cs:27:14:27:16 | access to field Item1 | +| Tuples.cs:27:14:27:14 | [post] access to local variable x | Tuples.cs:28:14:28:14 | access to local variable x | +| Tuples.cs:27:14:27:14 | access to local variable x | Tuples.cs:28:14:28:14 | access to local variable x | +| Tuples.cs:28:14:28:14 | access to local variable x | Tuples.cs:29:14:29:14 | access to local variable x | +| Tuples.cs:28:14:28:20 | access to field Item2 | Tuples.cs:29:14:29:20 | access to field Item2 | +| Tuples.cs:28:14:28:26 | access to field Item1 | Tuples.cs:28:14:28:26 | (...) ... | +| Tuples.cs:34:13:34:34 | SSA def(o1) | Tuples.cs:37:18:37:19 | access to local variable o1 | +| Tuples.cs:34:18:34:34 | call to method Source | Tuples.cs:34:13:34:34 | SSA def(o1) | +| Tuples.cs:34:33:34:33 | 3 | Tuples.cs:34:33:34:33 | (...) ... | +| Tuples.cs:35:13:35:34 | SSA def(o2) | Tuples.cs:37:46:37:47 | access to local variable o2 | +| Tuples.cs:35:18:35:34 | call to method Source | Tuples.cs:35:13:35:34 | SSA def(o2) | +| Tuples.cs:35:33:35:33 | 4 | Tuples.cs:35:33:35:33 | (...) ... | +| Tuples.cs:37:13:37:48 | SSA def(x) | Tuples.cs:38:14:38:14 | access to local variable x | +| Tuples.cs:37:13:37:48 | SSA qualifier def(x.Item1) | Tuples.cs:38:14:38:20 | access to field Item1 | +| Tuples.cs:37:13:37:48 | SSA qualifier def(x.Item2) | Tuples.cs:39:14:39:20 | access to field Item2 | +| Tuples.cs:37:13:37:48 | SSA qualifier def(x.Item10) | Tuples.cs:40:14:40:21 | access to field Item10 | +| Tuples.cs:37:17:37:48 | (..., ...) | Tuples.cs:37:13:37:48 | SSA def(x) | +| Tuples.cs:38:14:38:14 | [post] access to local variable x | Tuples.cs:39:14:39:14 | access to local variable x | +| Tuples.cs:38:14:38:14 | access to local variable x | Tuples.cs:39:14:39:14 | access to local variable x | +| Tuples.cs:39:14:39:14 | access to local variable x | Tuples.cs:40:14:40:14 | access to local variable x | +| Tuples.cs:39:14:39:20 | access to field Item2 | Tuples.cs:39:14:39:20 | (...) ... | +| Tuples.cs:45:13:45:33 | SSA def(o) | Tuples.cs:46:48:46:48 | access to local variable o | +| Tuples.cs:45:17:45:33 | call to method Source | Tuples.cs:45:13:45:33 | SSA def(o) | +| Tuples.cs:45:32:45:32 | 5 | Tuples.cs:45:32:45:32 | (...) ... | +| Tuples.cs:46:13:46:55 | SSA def(x) | Tuples.cs:47:14:47:14 | access to local variable x | +| Tuples.cs:46:13:46:55 | SSA qualifier def(x.Item1) | Tuples.cs:47:14:47:20 | access to field Item1 | +| Tuples.cs:46:13:46:55 | SSA qualifier def(x.Item2) | Tuples.cs:48:14:48:20 | access to field Item2 | +| Tuples.cs:46:17:46:55 | (...) ... | Tuples.cs:46:13:46:55 | SSA def(x) | +| Tuples.cs:46:47:46:55 | (..., ...) | Tuples.cs:46:17:46:55 | (...) ... | +| Tuples.cs:46:48:46:48 | access to local variable o | Tuples.cs:50:48:50:48 | access to local variable o | +| Tuples.cs:47:14:47:14 | [post] access to local variable x | Tuples.cs:48:14:48:14 | access to local variable x | +| Tuples.cs:47:14:47:14 | access to local variable x | Tuples.cs:48:14:48:14 | access to local variable x | +| Tuples.cs:48:14:48:20 | access to field Item2 | Tuples.cs:48:14:48:20 | (...) ... | +| Tuples.cs:50:13:50:55 | SSA def(y) | Tuples.cs:51:14:51:14 | access to local variable y | +| Tuples.cs:50:13:50:55 | SSA qualifier def(y.Item1) | Tuples.cs:51:14:51:20 | access to field Item1 | +| Tuples.cs:50:13:50:55 | SSA qualifier def(y.Item2) | Tuples.cs:52:14:52:20 | access to field Item2 | +| Tuples.cs:50:17:50:55 | (...) ... | Tuples.cs:50:13:50:55 | SSA def(y) | +| Tuples.cs:50:47:50:55 | (...) ... | Tuples.cs:50:17:50:55 | (...) ... | +| Tuples.cs:50:47:50:55 | (..., ...) | Tuples.cs:50:47:50:55 | (...) ... | +| Tuples.cs:51:14:51:14 | [post] access to local variable y | Tuples.cs:52:14:52:14 | access to local variable y | +| Tuples.cs:51:14:51:14 | access to local variable y | Tuples.cs:52:14:52:14 | access to local variable y | +| Tuples.cs:52:14:52:20 | access to field Item2 | Tuples.cs:52:14:52:20 | (...) ... | +| Tuples.cs:55:27:55:27 | s | Tuples.cs:75:18:75:18 | access to parameter s | +| Tuples.cs:57:13:57:34 | SSA def(o1) | Tuples.cs:59:18:59:19 | access to local variable o1 | +| Tuples.cs:57:18:57:34 | call to method Source | Tuples.cs:57:13:57:34 | SSA def(o1) | +| Tuples.cs:57:33:57:33 | 6 | Tuples.cs:57:33:57:33 | (...) ... | +| Tuples.cs:58:13:58:34 | SSA def(o2) | Tuples.cs:59:26:59:27 | access to local variable o2 | +| Tuples.cs:58:18:58:34 | call to method Source | Tuples.cs:58:13:58:34 | SSA def(o2) | +| Tuples.cs:58:33:58:33 | 7 | Tuples.cs:58:33:58:33 | (...) ... | +| Tuples.cs:59:13:59:32 | SSA def(x) | Tuples.cs:60:17:60:17 | access to local variable x | +| Tuples.cs:59:17:59:32 | (..., ...) | Tuples.cs:59:13:59:32 | SSA def(x) | +| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:62:18:62:57 | SSA def(t) | +| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:67:18:67:35 | (..., ...) | +| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:67:18:67:35 | (..., ...) | +| Tuples.cs:60:17:60:17 | access to local variable x | Tuples.cs:87:13:87:13 | access to local variable x | +| Tuples.cs:62:18:62:57 | SSA def(t) | Tuples.cs:62:64:62:64 | access to local variable t | +| Tuples.cs:62:18:62:57 | SSA qualifier def(t.Item1) | Tuples.cs:63:22:63:28 | access to field Item1 | +| Tuples.cs:62:18:62:57 | SSA qualifier def(t.Item2) | Tuples.cs:64:22:64:28 | access to field Item2 | +| Tuples.cs:62:18:62:57 | SSA qualifier def(t.Item2.Item1) | Tuples.cs:65:22:65:34 | access to field Item1 | +| Tuples.cs:62:18:62:57 | SSA qualifier def(t.Item2.Item2) | Tuples.cs:64:22:64:34 | access to field Item2 | +| Tuples.cs:62:18:62:57 | SSA qualifier def(t.Item3) | Tuples.cs:62:64:62:70 | access to field Item3 | +| Tuples.cs:62:64:62:64 | access to local variable t | Tuples.cs:63:22:63:22 | access to local variable t | +| Tuples.cs:63:22:63:22 | [post] access to local variable t | Tuples.cs:64:22:64:22 | access to local variable t | +| Tuples.cs:63:22:63:22 | access to local variable t | Tuples.cs:64:22:64:22 | access to local variable t | +| Tuples.cs:64:22:64:22 | [post] access to local variable t | Tuples.cs:65:22:65:22 | access to local variable t | +| Tuples.cs:64:22:64:22 | access to local variable t | Tuples.cs:65:22:65:22 | access to local variable t | +| Tuples.cs:64:22:64:28 | [post] access to field Item2 | Tuples.cs:65:22:65:28 | access to field Item2 | +| Tuples.cs:64:22:64:28 | access to field Item2 | Tuples.cs:65:22:65:28 | access to field Item2 | +| Tuples.cs:65:22:65:34 | access to field Item1 | Tuples.cs:65:22:65:34 | (...) ... | +| Tuples.cs:67:23:67:23 | SSA def(a) | Tuples.cs:68:22:68:22 | access to local variable a | +| Tuples.cs:67:27:67:27 | SSA def(b) | Tuples.cs:70:22:70:22 | access to local variable b | +| Tuples.cs:67:30:67:30 | SSA def(c) | Tuples.cs:69:22:69:22 | access to local variable c | +| Tuples.cs:70:22:70:22 | access to local variable b | Tuples.cs:70:22:70:22 | (...) ... | +| Tuples.cs:74:13:74:34 | SSA def(o3) | Tuples.cs:78:51:78:52 | access to local variable o3 | +| Tuples.cs:74:18:74:34 | call to method Source | Tuples.cs:74:13:74:34 | SSA def(o3) | +| Tuples.cs:74:33:74:33 | 8 | Tuples.cs:74:33:74:33 | (...) ... | +| Tuples.cs:75:13:75:30 | SSA def(y) | Tuples.cs:76:17:76:17 | access to local variable y | +| Tuples.cs:75:13:75:30 | SSA qualifier def(y.Item1) | Tuples.cs:79:22:79:28 | access to field Item1 | +| Tuples.cs:75:13:75:30 | SSA qualifier def(y.Item2) | Tuples.cs:80:22:80:28 | access to field Item2 | +| Tuples.cs:75:13:75:30 | SSA qualifier def(y.Item2.Item1) | Tuples.cs:82:22:82:34 | access to field Item1 | +| Tuples.cs:75:13:75:30 | SSA qualifier def(y.Item2.Item2) | Tuples.cs:80:22:80:34 | access to field Item2 | +| Tuples.cs:75:17:75:30 | (..., ...) | Tuples.cs:75:13:75:30 | SSA def(y) | +| Tuples.cs:75:18:75:18 | access to parameter s | Tuples.cs:75:25:75:25 | access to parameter s | +| Tuples.cs:76:17:76:17 | access to local variable y | Tuples.cs:78:26:78:35 | (..., ...) | +| Tuples.cs:76:17:76:17 | access to local variable y | Tuples.cs:79:22:79:22 | access to local variable y | +| Tuples.cs:78:19:78:23 | SSA def(a) | Tuples.cs:78:46:78:46 | access to local variable a | +| Tuples.cs:78:31:78:31 | SSA def(b) | Tuples.cs:83:22:83:22 | access to local variable b | +| Tuples.cs:78:34:78:34 | SSA def(c) | Tuples.cs:81:22:81:22 | access to local variable c | +| Tuples.cs:79:22:79:22 | [post] access to local variable y | Tuples.cs:80:22:80:22 | access to local variable y | +| Tuples.cs:79:22:79:22 | access to local variable y | Tuples.cs:80:22:80:22 | access to local variable y | +| Tuples.cs:80:22:80:22 | [post] access to local variable y | Tuples.cs:82:22:82:22 | access to local variable y | +| Tuples.cs:80:22:80:22 | access to local variable y | Tuples.cs:82:22:82:22 | access to local variable y | +| Tuples.cs:80:22:80:28 | [post] access to field Item2 | Tuples.cs:82:22:82:28 | access to field Item2 | +| Tuples.cs:80:22:80:28 | access to field Item2 | Tuples.cs:82:22:82:28 | access to field Item2 | +| Tuples.cs:82:22:82:34 | access to field Item1 | Tuples.cs:82:22:82:34 | (...) ... | +| Tuples.cs:83:22:83:22 | access to local variable b | Tuples.cs:83:22:83:22 | (...) ... | +| Tuples.cs:87:13:87:13 | access to local variable x | Tuples.cs:87:18:87:35 | (..., ...) | +| Tuples.cs:87:13:87:13 | access to local variable x | Tuples.cs:87:18:87:35 | (..., ...) | +| Tuples.cs:87:23:87:23 | SSA def(p) | Tuples.cs:89:18:89:18 | access to local variable p | +| Tuples.cs:87:27:87:27 | SSA def(q) | Tuples.cs:91:18:91:18 | access to local variable q | +| Tuples.cs:87:30:87:30 | SSA def(r) | Tuples.cs:90:18:90:18 | access to local variable r | +| Tuples.cs:91:18:91:18 | access to local variable q | Tuples.cs:91:18:91:18 | (...) ... | +| Tuples.cs:99:13:99:33 | SSA def(o) | Tuples.cs:100:24:100:24 | access to local variable o | +| Tuples.cs:99:17:99:33 | call to method Source | Tuples.cs:99:13:99:33 | SSA def(o) | +| Tuples.cs:99:32:99:32 | 9 | Tuples.cs:99:32:99:32 | (...) ... | +| Tuples.cs:100:13:100:28 | SSA def(r) | Tuples.cs:101:14:101:14 | access to local variable r | +| Tuples.cs:100:13:100:28 | SSA qualifier def(r.i) | Tuples.cs:101:14:101:16 | access to property i | +| Tuples.cs:100:17:100:28 | object creation of type R1 | Tuples.cs:100:13:100:28 | SSA def(r) | +| Tuples.cs:101:14:101:14 | [post] access to local variable r | Tuples.cs:103:22:103:22 | access to local variable r | +| Tuples.cs:101:14:101:14 | access to local variable r | Tuples.cs:103:22:103:22 | access to local variable r | +| Tuples.cs:103:9:103:22 | SSA def(a) | Tuples.cs:104:14:104:14 | access to local variable a | +| Tuples.cs:103:9:103:22 | SSA def(b) | Tuples.cs:105:14:105:14 | access to local variable b | +| Tuples.cs:103:22:103:22 | access to local variable r | Tuples.cs:103:9:103:18 | (..., ...) | +| Tuples.cs:103:22:103:22 | access to local variable r | Tuples.cs:107:17:107:17 | access to local variable r | +| Tuples.cs:105:14:105:14 | access to local variable b | Tuples.cs:105:14:105:14 | (...) ... | +| Tuples.cs:107:17:107:17 | access to local variable r | Tuples.cs:109:18:109:27 | (..., ...) | +| Tuples.cs:109:23:109:23 | SSA def(x) | Tuples.cs:110:22:110:22 | access to local variable x | +| Tuples.cs:109:26:109:26 | SSA def(y) | Tuples.cs:111:22:111:22 | access to local variable y | +| Tuples.cs:111:22:111:22 | access to local variable y | Tuples.cs:111:22:111:22 | (...) ... | +| Tuples.cs:118:13:118:33 | SSA def(o) | Tuples.cs:121:28:121:28 | access to local variable o | +| Tuples.cs:118:17:118:33 | call to method Source | Tuples.cs:118:13:118:33 | SSA def(o) | +| Tuples.cs:118:32:118:32 | 9 | Tuples.cs:118:32:118:32 | (...) ... | +| Tuples.cs:121:9:121:32 | SSA def(x1) | Tuples.cs:122:14:122:15 | access to local variable x1 | +| Tuples.cs:121:27:121:32 | (..., ...) | Tuples.cs:121:9:121:23 | (..., ...) | +| Tuples.cs:121:28:121:28 | access to local variable o | Tuples.cs:121:9:121:32 | SSA def(x1) | +| Tuples.cs:121:28:121:28 | access to local variable o | Tuples.cs:125:25:125:25 | access to local variable o | +| Tuples.cs:125:9:125:29 | SSA def(x2) | Tuples.cs:126:14:126:15 | access to local variable x2 | +| Tuples.cs:125:24:125:29 | (..., ...) | Tuples.cs:125:9:125:20 | (..., ...) | +| Tuples.cs:125:25:125:25 | access to local variable o | Tuples.cs:125:9:125:29 | SSA def(x2) | +| Tuples.cs:125:25:125:25 | access to local variable o | Tuples.cs:129:31:129:31 | access to local variable o | +| Tuples.cs:129:9:129:32 | SSA def(y3) | Tuples.cs:130:14:130:15 | access to local variable y3 | +| Tuples.cs:129:27:129:32 | (..., ...) | Tuples.cs:129:9:129:23 | (..., ...) | +| Tuples.cs:129:31:129:31 | access to local variable o | Tuples.cs:129:9:129:32 | SSA def(y3) | +| Tuples.cs:129:31:129:31 | access to local variable o | Tuples.cs:133:28:133:28 | access to local variable o | +| Tuples.cs:133:9:133:29 | SSA def(y4) | Tuples.cs:134:14:134:15 | access to local variable y4 | +| Tuples.cs:133:24:133:29 | (..., ...) | Tuples.cs:133:9:133:20 | (..., ...) | +| Tuples.cs:133:28:133:28 | access to local variable o | Tuples.cs:133:9:133:29 | SSA def(y4) | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected index 6b509daa1bb..e09c289b67e 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected @@ -4,357 +4,520 @@ Tuples.cs: # 5| -1: [TypeMention] Void # 6| 4: [BlockStmt] {...} # 7| 0: [LocalVariableDeclStmt] ... ...; -# 7| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String)) x = ... -# 7| -1: [TypeMention] (string, (int, string)) -# 7| 0: [LocalVariableAccess] access to local variable x -# 7| 1: [TupleExpr] (..., ...) -# 7| 0: [StringLiteral] "taint source" -# 7| 1: [TupleExpr] (..., ...) -# 7| 0: [IntLiteral] 1 -# 7| 1: [StringLiteral] "taint source" -# 8| 1: [ExprStmt] ...; -# 8| 0: [AssignExpr] ... = ... -# 8| 0: [TupleExpr] (..., ...) -# 8| 0: [LocalVariableDeclExpr] String a -# 8| 1: [TupleExpr] (..., ...) -# 8| 0: [LocalVariableDeclExpr] Int32 b -# 8| 1: [LocalVariableDeclExpr] String c -# 8| 1: [LocalVariableAccess] access to local variable x -# 9| 2: [ExprStmt] ...; -# 9| 0: [MethodCall] call to method Sink -# 9| 0: [LocalVariableAccess] access to local variable a -# 10| 3: [ExprStmt] ...; -# 10| 0: [MethodCall] call to method Sink -# 10| 0: [LocalVariableAccess] access to local variable b -# 11| 4: [ExprStmt] ...; -# 11| 0: [MethodCall] call to method Sink -# 11| 0: [LocalVariableAccess] access to local variable c +# 7| 0: [LocalVariableDeclAndInitExpr] Object o1 = ... +# 7| -1: [TypeMention] object +# 7| 0: [LocalVariableAccess] access to local variable o1 +# 7| 1: [MethodCall] call to method Source +# 7| 0: [CastExpr] (...) ... +# 7| 1: [IntLiteral] 1 +# 8| 1: [LocalVariableDeclStmt] ... ...; +# 8| 0: [LocalVariableDeclAndInitExpr] Object o2 = ... +# 8| -1: [TypeMention] object +# 8| 0: [LocalVariableAccess] access to local variable o2 +# 8| 1: [MethodCall] call to method Source +# 8| 0: [CastExpr] (...) ... +# 8| 1: [IntLiteral] 2 +# 10| 2: [LocalVariableDeclStmt] ... ...; +# 10| 0: [LocalVariableDeclAndInitExpr] (Object,(Int32,Object)) x = ... +# 10| -1: [TypeMention] (object, (int, object)) +# 10| 0: [LocalVariableAccess] access to local variable x +# 10| 1: [TupleExpr] (..., ...) +# 10| 0: [LocalVariableAccess] access to local variable o1 +# 10| 1: [TupleExpr] (..., ...) +# 10| 0: [IntLiteral] 1 +# 10| 1: [LocalVariableAccess] access to local variable o2 +# 11| 3: [ExprStmt] ...; +# 11| 0: [AssignExpr] ... = ... +# 11| 0: [TupleExpr] (..., ...) +# 11| 0: [LocalVariableDeclExpr] Object a +# 11| 1: [TupleExpr] (..., ...) +# 11| 0: [LocalVariableDeclExpr] Int32 b +# 11| 1: [LocalVariableDeclExpr] Object c +# 11| 1: [LocalVariableAccess] access to local variable x +# 12| 4: [ExprStmt] ...; +# 12| 0: [MethodCall] call to method Sink +# 12| 0: [LocalVariableAccess] access to local variable a # 13| 5: [ExprStmt] ...; -# 13| 0: [AssignExpr] ... = ... -# 13| 0: [TupleExpr] (..., ...) -# 13| 0: [LocalVariableAccess] access to local variable a -# 13| 1: [TupleExpr] (..., ...) -# 13| 0: [LocalVariableAccess] access to local variable b -# 13| 1: [LocalVariableAccess] access to local variable c -# 13| 1: [LocalVariableAccess] access to local variable x +# 13| 0: [MethodCall] call to method Sink +# 13| 0: [CastExpr] (...) ... +# 13| 1: [LocalVariableAccess] access to local variable b # 14| 6: [ExprStmt] ...; -# 14| 0: [MethodCall] call to method Sink -# 14| 0: [LocalVariableAccess] access to local variable a -# 15| 7: [ExprStmt] ...; -# 15| 0: [MethodCall] call to method Sink -# 15| 0: [LocalVariableAccess] access to local variable b -# 16| 8: [ExprStmt] ...; -# 16| 0: [MethodCall] call to method Sink -# 16| 0: [LocalVariableAccess] access to local variable c +# 14| 0: [MethodCall] call to method Sink +# 14| 0: [LocalVariableAccess] access to local variable c +# 16| 7: [ExprStmt] ...; +# 16| 0: [AssignExpr] ... = ... +# 16| 0: [TupleExpr] (..., ...) +# 16| 0: [LocalVariableAccess] access to local variable a +# 16| 1: [TupleExpr] (..., ...) +# 16| 0: [LocalVariableAccess] access to local variable b +# 16| 1: [LocalVariableAccess] access to local variable c +# 16| 1: [LocalVariableAccess] access to local variable x +# 17| 8: [ExprStmt] ...; +# 17| 0: [MethodCall] call to method Sink +# 17| 0: [LocalVariableAccess] access to local variable a # 18| 9: [ExprStmt] ...; -# 18| 0: [AssignExpr] ... = ... -# 18| 0: [TupleExpr] (..., ...) -# 18| 0: [LocalVariableDeclExpr] String p -# 18| 1: [LocalVariableDeclExpr] (Int32,String) q -# 18| 1: [LocalVariableAccess] access to local variable x +# 18| 0: [MethodCall] call to method Sink +# 18| 0: [CastExpr] (...) ... +# 18| 1: [LocalVariableAccess] access to local variable b # 19| 10: [ExprStmt] ...; -# 19| 0: [MethodCall] call to method Sink -# 19| 0: [LocalVariableAccess] access to local variable p -# 20| 11: [ExprStmt] ...; -# 20| 0: [MethodCall] call to method Sink -# 20| 0: [FieldAccess] access to field Item1 -# 20| -1: [LocalVariableAccess] access to local variable q -# 21| 12: [ExprStmt] ...; -# 21| 0: [MethodCall] call to method Sink -# 21| 0: [FieldAccess] access to field Item2 -# 21| -1: [LocalVariableAccess] access to local variable q +# 19| 0: [MethodCall] call to method Sink +# 19| 0: [LocalVariableAccess] access to local variable c +# 21| 11: [ExprStmt] ...; +# 21| 0: [AssignExpr] ... = ... +# 21| 0: [TupleExpr] (..., ...) +# 21| 0: [LocalVariableDeclExpr] Object p +# 21| 1: [LocalVariableDeclExpr] (Int32,Object) q +# 21| 1: [LocalVariableAccess] access to local variable x +# 22| 12: [ExprStmt] ...; +# 22| 0: [MethodCall] call to method Sink +# 22| 0: [LocalVariableAccess] access to local variable p # 23| 13: [ExprStmt] ...; -# 23| 0: [MethodCall] call to method Sink -# 23| 0: [FieldAccess] access to field Item1 -# 23| -1: [LocalVariableAccess] access to local variable x +# 23| 0: [MethodCall] call to method Sink +# 23| 0: [CastExpr] (...) ... +# 23| 1: [FieldAccess] access to field Item1 +# 23| -1: [LocalVariableAccess] access to local variable q # 24| 14: [ExprStmt] ...; -# 24| 0: [MethodCall] call to method Sink -# 24| 0: [FieldAccess] access to field Item1 -# 24| -1: [LocalVariableAccess] access to local variable x -# 25| 15: [ExprStmt] ...; -# 25| 0: [MethodCall] call to method Sink -# 25| 0: [FieldAccess] access to field Item1 -# 25| -1: [FieldAccess] access to field Item2 -# 25| -1: [LocalVariableAccess] access to local variable x -# 26| 16: [ExprStmt] ...; -# 26| 0: [MethodCall] call to method Sink -# 26| 0: [FieldAccess] access to field Item2 -# 26| -1: [FieldAccess] access to field Item2 -# 26| -1: [LocalVariableAccess] access to local variable x -# 29| 6: [Method] M2 -# 29| -1: [TypeMention] Void -# 30| 4: [BlockStmt] {...} -# 31| 0: [LocalVariableDeclStmt] ... ...; -# 31| 0: [LocalVariableDeclAndInitExpr] (String,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,String) x = ... -# 31| -1: [TypeMention] (string, int, int, int, int, int, int, int, int, string) -# 31| 0: [LocalVariableAccess] access to local variable x -# 31| 1: [TupleExpr] (..., ...) -# 31| 0: [StringLiteral] "taint source" -# 31| 1: [IntLiteral] 2 -# 31| 2: [IntLiteral] 3 -# 31| 3: [IntLiteral] 4 -# 31| 4: [IntLiteral] 5 -# 31| 5: [IntLiteral] 6 -# 31| 6: [IntLiteral] 7 -# 31| 7: [IntLiteral] 8 -# 31| 8: [IntLiteral] 9 -# 31| 9: [StringLiteral] "taint source" -# 32| 1: [ExprStmt] ...; -# 32| 0: [MethodCall] call to method Sink -# 32| 0: [FieldAccess] access to field Item1 -# 32| -1: [LocalVariableAccess] access to local variable x -# 33| 2: [ExprStmt] ...; -# 33| 0: [MethodCall] call to method Sink -# 33| 0: [FieldAccess] access to field Item2 -# 33| -1: [LocalVariableAccess] access to local variable x -# 34| 3: [ExprStmt] ...; -# 34| 0: [MethodCall] call to method Sink -# 34| 0: [FieldAccess] access to field Item10 -# 34| -1: [LocalVariableAccess] access to local variable x -# 37| 7: [Method] M3 -# 37| -1: [TypeMention] Void -# 38| 4: [BlockStmt] {...} -# 39| 0: [LocalVariableDeclStmt] ... ...; -# 39| 0: [LocalVariableDeclAndInitExpr] (String,Int32,Int32) x = ... -# 39| -1: [TypeMention] (string, int, int) -# 39| 0: [LocalVariableAccess] access to local variable x -# 39| 1: [CastExpr] (...) ... -# 39| 0: [TypeAccess] access to type (String,Int32,Int32) -# 39| 0: [TypeMention] (string, int, int) -# 39| 1: [TypeMention] string -# 39| 2: [TypeMention] int -# 39| 3: [TypeMention] int -# 39| 1: [TupleExpr] (..., ...) -# 39| 0: [StringLiteral] "taint source" -# 39| 1: [IntLiteral] 2 -# 39| 2: [IntLiteral] 3 -# 40| 1: [ExprStmt] ...; -# 40| 0: [MethodCall] call to method Sink -# 40| 0: [FieldAccess] access to field Item1 +# 24| 0: [MethodCall] call to method Sink +# 24| 0: [FieldAccess] access to field Item2 +# 24| -1: [LocalVariableAccess] access to local variable q +# 26| 15: [ExprStmt] ...; +# 26| 0: [MethodCall] call to method Sink +# 26| 0: [FieldAccess] access to field Item1 +# 26| -1: [LocalVariableAccess] access to local variable x +# 27| 16: [ExprStmt] ...; +# 27| 0: [MethodCall] call to method Sink +# 27| 0: [FieldAccess] access to field Item1 +# 27| -1: [LocalVariableAccess] access to local variable x +# 28| 17: [ExprStmt] ...; +# 28| 0: [MethodCall] call to method Sink +# 28| 0: [CastExpr] (...) ... +# 28| 1: [FieldAccess] access to field Item1 +# 28| -1: [FieldAccess] access to field Item2 +# 28| -1: [LocalVariableAccess] access to local variable x +# 29| 18: [ExprStmt] ...; +# 29| 0: [MethodCall] call to method Sink +# 29| 0: [FieldAccess] access to field Item2 +# 29| -1: [FieldAccess] access to field Item2 +# 29| -1: [LocalVariableAccess] access to local variable x +# 32| 6: [Method] M2 +# 32| -1: [TypeMention] Void +# 33| 4: [BlockStmt] {...} +# 34| 0: [LocalVariableDeclStmt] ... ...; +# 34| 0: [LocalVariableDeclAndInitExpr] Object o1 = ... +# 34| -1: [TypeMention] object +# 34| 0: [LocalVariableAccess] access to local variable o1 +# 34| 1: [MethodCall] call to method Source +# 34| 0: [CastExpr] (...) ... +# 34| 1: [IntLiteral] 3 +# 35| 1: [LocalVariableDeclStmt] ... ...; +# 35| 0: [LocalVariableDeclAndInitExpr] Object o2 = ... +# 35| -1: [TypeMention] object +# 35| 0: [LocalVariableAccess] access to local variable o2 +# 35| 1: [MethodCall] call to method Source +# 35| 0: [CastExpr] (...) ... +# 35| 1: [IntLiteral] 4 +# 37| 2: [LocalVariableDeclStmt] ... ...; +# 37| 0: [LocalVariableDeclAndInitExpr] (Object,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Int32,Object) x = ... +# 37| -1: [TypeMention] (object, int, int, int, int, int, int, int, int, object) +# 37| 0: [LocalVariableAccess] access to local variable x +# 37| 1: [TupleExpr] (..., ...) +# 37| 0: [LocalVariableAccess] access to local variable o1 +# 37| 1: [IntLiteral] 2 +# 37| 2: [IntLiteral] 3 +# 37| 3: [IntLiteral] 4 +# 37| 4: [IntLiteral] 5 +# 37| 5: [IntLiteral] 6 +# 37| 6: [IntLiteral] 7 +# 37| 7: [IntLiteral] 8 +# 37| 8: [IntLiteral] 9 +# 37| 9: [LocalVariableAccess] access to local variable o2 +# 38| 3: [ExprStmt] ...; +# 38| 0: [MethodCall] call to method Sink +# 38| 0: [FieldAccess] access to field Item1 +# 38| -1: [LocalVariableAccess] access to local variable x +# 39| 4: [ExprStmt] ...; +# 39| 0: [MethodCall] call to method Sink +# 39| 0: [CastExpr] (...) ... +# 39| 1: [FieldAccess] access to field Item2 +# 39| -1: [LocalVariableAccess] access to local variable x +# 40| 5: [ExprStmt] ...; +# 40| 0: [MethodCall] call to method Sink +# 40| 0: [FieldAccess] access to field Item10 # 40| -1: [LocalVariableAccess] access to local variable x -# 41| 2: [ExprStmt] ...; -# 41| 0: [MethodCall] call to method Sink -# 41| 0: [FieldAccess] access to field Item2 -# 41| -1: [LocalVariableAccess] access to local variable x -# 43| 3: [LocalVariableDeclStmt] ... ...; -# 43| 0: [LocalVariableDeclAndInitExpr] (Object,Int32,Int32) y = ... -# 43| -1: [TypeMention] (object, int, int) -# 43| 0: [LocalVariableAccess] access to local variable y -# 43| 1: [CastExpr] (...) ... -# 43| 0: [TypeAccess] access to type (Object,Int32,Int32) -# 43| 0: [TypeMention] (object, int, int) -# 43| 1: [TypeMention] object -# 43| 2: [TypeMention] int -# 43| 3: [TypeMention] int -# 43| 1: [CastExpr] (...) ... -# 43| 1: [TupleExpr] (..., ...) -# 43| 0: [StringLiteral] "taint source" -# 43| 1: [IntLiteral] 2 -# 43| 2: [IntLiteral] 3 -# 44| 4: [ExprStmt] ...; -# 44| 0: [MethodCall] call to method Sink -# 44| 0: [FieldAccess] access to field Item1 -# 44| -1: [LocalVariableAccess] access to local variable y -# 45| 5: [ExprStmt] ...; -# 45| 0: [MethodCall] call to method Sink -# 45| 0: [FieldAccess] access to field Item2 -# 45| -1: [LocalVariableAccess] access to local variable y -# 48| 8: [Method] M4 -# 48| -1: [TypeMention] Void +# 43| 7: [Method] M3 +# 43| -1: [TypeMention] Void +# 44| 4: [BlockStmt] {...} +# 45| 0: [LocalVariableDeclStmt] ... ...; +# 45| 0: [LocalVariableDeclAndInitExpr] String o = ... +# 45| -1: [TypeMention] string +# 45| 0: [LocalVariableAccess] access to local variable o +# 45| 1: [MethodCall] call to method Source +# 45| 0: [CastExpr] (...) ... +# 45| 1: [IntLiteral] 5 +# 46| 1: [LocalVariableDeclStmt] ... ...; +# 46| 0: [LocalVariableDeclAndInitExpr] (String,Int32,Int32) x = ... +# 46| -1: [TypeMention] (string, int, int) +# 46| 0: [LocalVariableAccess] access to local variable x +# 46| 1: [CastExpr] (...) ... +# 46| 0: [TypeAccess] access to type (String,Int32,Int32) +# 46| 0: [TypeMention] (string, int, int) +# 46| 1: [TypeMention] string +# 46| 2: [TypeMention] int +# 46| 3: [TypeMention] int +# 46| 1: [TupleExpr] (..., ...) +# 46| 0: [LocalVariableAccess] access to local variable o +# 46| 1: [IntLiteral] 2 +# 46| 2: [IntLiteral] 3 +# 47| 2: [ExprStmt] ...; +# 47| 0: [MethodCall] call to method Sink +# 47| 0: [FieldAccess] access to field Item1 +# 47| -1: [LocalVariableAccess] access to local variable x +# 48| 3: [ExprStmt] ...; +# 48| 0: [MethodCall] call to method Sink +# 48| 0: [CastExpr] (...) ... +# 48| 1: [FieldAccess] access to field Item2 +# 48| -1: [LocalVariableAccess] access to local variable x +# 50| 4: [LocalVariableDeclStmt] ... ...; +# 50| 0: [LocalVariableDeclAndInitExpr] (Object,Int32,Int32) y = ... +# 50| -1: [TypeMention] (object, int, int) +# 50| 0: [LocalVariableAccess] access to local variable y +# 50| 1: [CastExpr] (...) ... +# 50| 0: [TypeAccess] access to type (Object,Int32,Int32) +# 50| 0: [TypeMention] (object, int, int) +# 50| 1: [TypeMention] object +# 50| 2: [TypeMention] int +# 50| 3: [TypeMention] int +# 50| 1: [CastExpr] (...) ... +# 50| 1: [TupleExpr] (..., ...) +# 50| 0: [LocalVariableAccess] access to local variable o +# 50| 1: [IntLiteral] 2 +# 50| 2: [IntLiteral] 3 +# 51| 5: [ExprStmt] ...; +# 51| 0: [MethodCall] call to method Sink +# 51| 0: [FieldAccess] access to field Item1 +# 51| -1: [LocalVariableAccess] access to local variable y +# 52| 6: [ExprStmt] ...; +# 52| 0: [MethodCall] call to method Sink +# 52| 0: [CastExpr] (...) ... +# 52| 1: [FieldAccess] access to field Item2 +# 52| -1: [LocalVariableAccess] access to local variable y +# 55| 8: [Method] M4 +# 55| -1: [TypeMention] Void #-----| 2: (Parameters) -# 48| 0: [Parameter] s -# 48| -1: [TypeMention] string -# 49| 4: [BlockStmt] {...} -# 50| 0: [LocalVariableDeclStmt] ... ...; -# 50| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String),Int32) x = ... -# 50| -1: [TypeMention] (string, (int, string), int) -# 50| 0: [LocalVariableAccess] access to local variable x -# 50| 1: [TupleExpr] (..., ...) -# 50| 0: [StringLiteral] "taint source" -# 50| 1: [TupleExpr] (..., ...) -# 50| 0: [IntLiteral] 2 -# 50| 1: [StringLiteral] "taint source" -# 50| 2: [IntLiteral] 3 -# 51| 1: [SwitchStmt] switch (...) {...} -# 51| 0: [LocalVariableAccess] access to local variable x -# 53| 0: [CaseStmt] case ...: -# 53| 0: [VariablePatternExpr] (String,(Int32,String),Int32) t -# 53| 0: [TypeMention] (string, (int, string), int) -# 53| 1: [TypeMention] string -# 53| 2: [TypeMention] (int, string) -# 53| 1: [TypeMention] int -# 53| 2: [TypeMention] string -# 53| 3: [TypeMention] int -# 53| 1: [GTExpr] ... > ... -# 53| 0: [FieldAccess] access to field Item3 -# 53| -1: [LocalVariableAccess] access to local variable t -# 53| 1: [IntLiteral] 1 -# 54| 1: [ExprStmt] ...; -# 54| 0: [MethodCall] call to method Sink -# 54| 0: [FieldAccess] access to field Item1 -# 54| -1: [LocalVariableAccess] access to local variable t -# 55| 2: [ExprStmt] ...; -# 55| 0: [MethodCall] call to method Sink -# 55| 0: [FieldAccess] access to field Item2 -# 55| -1: [FieldAccess] access to field Item2 -# 55| -1: [LocalVariableAccess] access to local variable t -# 56| 3: [ExprStmt] ...; -# 56| 0: [MethodCall] call to method Sink -# 56| 0: [FieldAccess] access to field Item1 -# 56| -1: [FieldAccess] access to field Item2 -# 56| -1: [LocalVariableAccess] access to local variable t -# 57| 4: [BreakStmt] break; -# 58| 5: [CaseStmt] case ...: -# 58| 0: [TupleExpr] (..., ...) -# 58| 0: [VariablePatternExpr] String a -# 58| 1: [TupleExpr] (..., ...) -# 58| 0: [VariablePatternExpr] Int32 b -# 58| 1: [VariablePatternExpr] String c -# 58| 2: [DiscardPatternExpr] _ -# 59| 6: [ExprStmt] ...; -# 59| 0: [MethodCall] call to method Sink -# 59| 0: [LocalVariableAccess] access to local variable a -# 60| 7: [ExprStmt] ...; -# 60| 0: [MethodCall] call to method Sink -# 60| 0: [LocalVariableAccess] access to local variable c -# 61| 8: [ExprStmt] ...; -# 61| 0: [MethodCall] call to method Sink -# 61| 0: [LocalVariableAccess] access to local variable b -# 62| 9: [BreakStmt] break; -# 65| 2: [LocalVariableDeclStmt] ... ...; -# 65| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String),Int32) y = ... -# 65| -1: [TypeMention] (string, (int, string), int) -# 65| 0: [LocalVariableAccess] access to local variable y -# 65| 1: [TupleExpr] (..., ...) -# 65| 0: [ParameterAccess] access to parameter s -# 65| 1: [TupleExpr] (..., ...) -# 65| 0: [IntLiteral] 2 -# 65| 1: [ParameterAccess] access to parameter s -# 65| 2: [IntLiteral] 3 -# 66| 3: [SwitchStmt] switch (...) {...} -# 66| 0: [LocalVariableAccess] access to local variable y -# 68| 0: [CaseStmt] case ...: -# 68| 0: [RecursivePatternExpr] { ... } -# 68| 2: [PositionalPatternExpr] ( ... ) -# 68| 0: [ConstantPatternExpr,StringLiteral] "taint source" -# 68| 1: [TupleExpr] (..., ...) -# 68| 0: [VariablePatternExpr] Int32 b -# 68| 1: [VariablePatternExpr] String c -# 68| 2: [DiscardPatternExpr] _ -# 69| 1: [ExprStmt] ...; -# 69| 0: [MethodCall] call to method Sink -# 69| 0: [FieldAccess] access to field Item1 -# 69| -1: [LocalVariableAccess] access to local variable y -# 70| 2: [ExprStmt] ...; -# 70| 0: [MethodCall] call to method Sink -# 70| 0: [FieldAccess] access to field Item2 -# 70| -1: [FieldAccess] access to field Item2 -# 70| -1: [LocalVariableAccess] access to local variable y -# 71| 3: [ExprStmt] ...; -# 71| 0: [MethodCall] call to method Sink -# 71| 0: [LocalVariableAccess] access to local variable c -# 72| 4: [ExprStmt] ...; -# 72| 0: [MethodCall] call to method Sink -# 72| 0: [FieldAccess] access to field Item1 -# 72| -1: [FieldAccess] access to field Item2 -# 72| -1: [LocalVariableAccess] access to local variable y -# 73| 5: [ExprStmt] ...; -# 73| 0: [MethodCall] call to method Sink -# 73| 0: [LocalVariableAccess] access to local variable b -# 74| 6: [BreakStmt] break; -# 77| 4: [IfStmt] if (...) ... -# 77| 0: [IsExpr] ... is ... -# 77| 0: [LocalVariableAccess] access to local variable x -# 77| 1: [TupleExpr] (..., ...) -# 77| 0: [VariablePatternExpr] String p -# 77| 1: [TupleExpr] (..., ...) -# 77| 0: [VariablePatternExpr] Int32 q -# 77| 1: [VariablePatternExpr] String r -# 77| 2: [DiscardPatternExpr] _ -# 78| 1: [BlockStmt] {...} -# 79| 0: [ExprStmt] ...; -# 79| 0: [MethodCall] call to method Sink -# 79| 0: [LocalVariableAccess] access to local variable p -# 80| 1: [ExprStmt] ...; -# 80| 0: [MethodCall] call to method Sink -# 80| 0: [LocalVariableAccess] access to local variable r -# 81| 2: [ExprStmt] ...; -# 81| 0: [MethodCall] call to method Sink -# 81| 0: [LocalVariableAccess] access to local variable q -# 85| 9: [RecordClass] R1 -# 85| 12: [NEOperator] != +# 55| 0: [Parameter] s +# 55| -1: [TypeMention] string +# 56| 4: [BlockStmt] {...} +# 57| 0: [LocalVariableDeclStmt] ... ...; +# 57| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 57| -1: [TypeMention] string +# 57| 0: [LocalVariableAccess] access to local variable o1 +# 57| 1: [MethodCall] call to method Source +# 57| 0: [CastExpr] (...) ... +# 57| 1: [IntLiteral] 6 +# 58| 1: [LocalVariableDeclStmt] ... ...; +# 58| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 58| -1: [TypeMention] string +# 58| 0: [LocalVariableAccess] access to local variable o2 +# 58| 1: [MethodCall] call to method Source +# 58| 0: [CastExpr] (...) ... +# 58| 1: [IntLiteral] 7 +# 59| 2: [LocalVariableDeclStmt] ... ...; +# 59| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String),Int32) x = ... +# 59| -1: [TypeMention] (string, (int, string), int) +# 59| 0: [LocalVariableAccess] access to local variable x +# 59| 1: [TupleExpr] (..., ...) +# 59| 0: [LocalVariableAccess] access to local variable o1 +# 59| 1: [TupleExpr] (..., ...) +# 59| 0: [IntLiteral] 2 +# 59| 1: [LocalVariableAccess] access to local variable o2 +# 59| 2: [IntLiteral] 3 +# 60| 3: [SwitchStmt] switch (...) {...} +# 60| 0: [LocalVariableAccess] access to local variable x +# 62| 0: [CaseStmt] case ...: +# 62| 0: [VariablePatternExpr] (String,(Int32,String),Int32) t +# 62| 0: [TypeMention] (string, (int, string), int) +# 62| 1: [TypeMention] string +# 62| 2: [TypeMention] (int, string) +# 62| 1: [TypeMention] int +# 62| 2: [TypeMention] string +# 62| 3: [TypeMention] int +# 62| 1: [GTExpr] ... > ... +# 62| 0: [FieldAccess] access to field Item3 +# 62| -1: [LocalVariableAccess] access to local variable t +# 62| 1: [IntLiteral] 1 +# 63| 1: [ExprStmt] ...; +# 63| 0: [MethodCall] call to method Sink +# 63| 0: [FieldAccess] access to field Item1 +# 63| -1: [LocalVariableAccess] access to local variable t +# 64| 2: [ExprStmt] ...; +# 64| 0: [MethodCall] call to method Sink +# 64| 0: [FieldAccess] access to field Item2 +# 64| -1: [FieldAccess] access to field Item2 +# 64| -1: [LocalVariableAccess] access to local variable t +# 65| 3: [ExprStmt] ...; +# 65| 0: [MethodCall] call to method Sink +# 65| 0: [CastExpr] (...) ... +# 65| 1: [FieldAccess] access to field Item1 +# 65| -1: [FieldAccess] access to field Item2 +# 65| -1: [LocalVariableAccess] access to local variable t +# 66| 4: [BreakStmt] break; +# 67| 5: [CaseStmt] case ...: +# 67| 0: [TupleExpr] (..., ...) +# 67| 0: [VariablePatternExpr] String a +# 67| 1: [TupleExpr] (..., ...) +# 67| 0: [VariablePatternExpr] Int32 b +# 67| 1: [VariablePatternExpr] String c +# 67| 2: [DiscardPatternExpr] _ +# 68| 6: [ExprStmt] ...; +# 68| 0: [MethodCall] call to method Sink +# 68| 0: [LocalVariableAccess] access to local variable a +# 69| 7: [ExprStmt] ...; +# 69| 0: [MethodCall] call to method Sink +# 69| 0: [LocalVariableAccess] access to local variable c +# 70| 8: [ExprStmt] ...; +# 70| 0: [MethodCall] call to method Sink +# 70| 0: [CastExpr] (...) ... +# 70| 1: [LocalVariableAccess] access to local variable b +# 71| 9: [BreakStmt] break; +# 74| 4: [LocalVariableDeclStmt] ... ...; +# 74| 0: [LocalVariableDeclAndInitExpr] String o3 = ... +# 74| -1: [TypeMention] string +# 74| 0: [LocalVariableAccess] access to local variable o3 +# 74| 1: [MethodCall] call to method Source +# 74| 0: [CastExpr] (...) ... +# 74| 1: [IntLiteral] 8 +# 75| 5: [LocalVariableDeclStmt] ... ...; +# 75| 0: [LocalVariableDeclAndInitExpr] (String,(Int32,String),Int32) y = ... +# 75| -1: [TypeMention] (string, (int, string), int) +# 75| 0: [LocalVariableAccess] access to local variable y +# 75| 1: [TupleExpr] (..., ...) +# 75| 0: [ParameterAccess] access to parameter s +# 75| 1: [TupleExpr] (..., ...) +# 75| 0: [IntLiteral] 2 +# 75| 1: [ParameterAccess] access to parameter s +# 75| 2: [IntLiteral] 3 +# 76| 6: [SwitchStmt] switch (...) {...} +# 76| 0: [LocalVariableAccess] access to local variable y +# 78| 0: [CaseStmt] case ...: +# 78| 0: [RecursivePatternExpr] { ... } +# 78| 2: [PositionalPatternExpr] ( ... ) +# 78| 0: [VariablePatternExpr] String a +# 78| 1: [TupleExpr] (..., ...) +# 78| 0: [VariablePatternExpr] Int32 b +# 78| 1: [VariablePatternExpr] String c +# 78| 2: [DiscardPatternExpr] _ +# 78| 1: [EQExpr] ... == ... +# 78| 0: [LocalVariableAccess] access to local variable a +# 78| 1: [LocalVariableAccess] access to local variable o3 +# 79| 1: [ExprStmt] ...; +# 79| 0: [MethodCall] call to method Sink +# 79| 0: [FieldAccess] access to field Item1 +# 79| -1: [LocalVariableAccess] access to local variable y +# 80| 2: [ExprStmt] ...; +# 80| 0: [MethodCall] call to method Sink +# 80| 0: [FieldAccess] access to field Item2 +# 80| -1: [FieldAccess] access to field Item2 +# 80| -1: [LocalVariableAccess] access to local variable y +# 81| 3: [ExprStmt] ...; +# 81| 0: [MethodCall] call to method Sink +# 81| 0: [LocalVariableAccess] access to local variable c +# 82| 4: [ExprStmt] ...; +# 82| 0: [MethodCall] call to method Sink +# 82| 0: [CastExpr] (...) ... +# 82| 1: [FieldAccess] access to field Item1 +# 82| -1: [FieldAccess] access to field Item2 +# 82| -1: [LocalVariableAccess] access to local variable y +# 83| 5: [ExprStmt] ...; +# 83| 0: [MethodCall] call to method Sink +# 83| 0: [CastExpr] (...) ... +# 83| 1: [LocalVariableAccess] access to local variable b +# 84| 6: [BreakStmt] break; +# 87| 7: [IfStmt] if (...) ... +# 87| 0: [IsExpr] ... is ... +# 87| 0: [LocalVariableAccess] access to local variable x +# 87| 1: [TupleExpr] (..., ...) +# 87| 0: [VariablePatternExpr] String p +# 87| 1: [TupleExpr] (..., ...) +# 87| 0: [VariablePatternExpr] Int32 q +# 87| 1: [VariablePatternExpr] String r +# 87| 2: [DiscardPatternExpr] _ +# 88| 1: [BlockStmt] {...} +# 89| 0: [ExprStmt] ...; +# 89| 0: [MethodCall] call to method Sink +# 89| 0: [LocalVariableAccess] access to local variable p +# 90| 1: [ExprStmt] ...; +# 90| 0: [MethodCall] call to method Sink +# 90| 0: [LocalVariableAccess] access to local variable r +# 91| 2: [ExprStmt] ...; +# 91| 0: [MethodCall] call to method Sink +# 91| 0: [CastExpr] (...) ... +# 91| 1: [LocalVariableAccess] access to local variable q +# 95| 9: [RecordClass] R1 +# 95| 12: [NEOperator] != #-----| 2: (Parameters) -# 85| 0: [Parameter] left -# 85| 1: [Parameter] right -# 85| 13: [EQOperator] == +# 95| 0: [Parameter] left +# 95| 1: [Parameter] right +# 95| 13: [EQOperator] == #-----| 2: (Parameters) -# 85| 0: [Parameter] left -# 85| 1: [Parameter] right -# 85| 14: [Property] EqualityContract -# 85| 3: [Getter] get_EqualityContract -# 85| 15: [InstanceConstructor] R1 +# 95| 0: [Parameter] left +# 95| 1: [Parameter] right +# 95| 14: [Property] EqualityContract +# 95| 3: [Getter] get_EqualityContract +# 95| 15: [InstanceConstructor] R1 #-----| 2: (Parameters) -# 85| 0: [Parameter] i -# 85| -1: [TypeMention] string -# 85| 1: [Parameter] j -# 85| -1: [TypeMention] int -# 85| 16: [Property] i -# 85| 3: [Getter] get_i -# 85| 4: [Setter] set_i +# 95| 0: [Parameter] i +# 95| -1: [TypeMention] string +# 95| 1: [Parameter] j +# 95| -1: [TypeMention] int +# 95| 16: [Property] i +# 95| 3: [Getter] get_i +# 95| 4: [Setter] set_i #-----| 2: (Parameters) -# 85| 0: [Parameter] value -# 85| 17: [Property] j -# 85| 3: [Getter] get_j -# 85| 4: [Setter] set_j +# 95| 0: [Parameter] value +# 95| 17: [Property] j +# 95| 3: [Getter] get_j +# 95| 4: [Setter] set_j #-----| 2: (Parameters) -# 85| 0: [Parameter] value -# 87| 10: [Method] M5 -# 87| -1: [TypeMention] Void -# 88| 4: [BlockStmt] {...} -# 89| 0: [LocalVariableDeclStmt] ... ...; -# 89| 0: [LocalVariableDeclAndInitExpr] R1 r = ... -# 89| -1: [TypeMention] R1 -# 89| 0: [LocalVariableAccess] access to local variable r -# 89| 1: [ObjectCreation] object creation of type R1 -# 89| -1: [TypeMention] R1 -# 89| 0: [StringLiteral] "taint source" -# 89| 1: [IntLiteral] 1 -# 90| 1: [ExprStmt] ...; -# 90| 0: [MethodCall] call to method Sink -# 90| 0: [PropertyCall] access to property i -# 90| -1: [LocalVariableAccess] access to local variable r -# 92| 2: [ExprStmt] ...; -# 92| 0: [AssignExpr] ... = ... -# 92| 0: [TupleExpr] (..., ...) -# 92| 0: [LocalVariableDeclExpr] String a -# 92| 1: [LocalVariableDeclExpr] Int32 b -# 92| 1: [LocalVariableAccess] access to local variable r -# 93| 3: [ExprStmt] ...; -# 93| 0: [MethodCall] call to method Sink -# 93| 0: [LocalVariableAccess] access to local variable a -# 94| 4: [ExprStmt] ...; -# 94| 0: [MethodCall] call to method Sink -# 94| 0: [LocalVariableAccess] access to local variable b -# 96| 5: [SwitchStmt] switch (...) {...} -# 96| 0: [LocalVariableAccess] access to local variable r -# 98| 0: [CaseStmt] case ...: -# 98| 0: [TupleExpr] (..., ...) -# 98| 0: [VariablePatternExpr] String x -# 98| 1: [VariablePatternExpr] Int32 y -# 99| 1: [ExprStmt] ...; -# 99| 0: [MethodCall] call to method Sink -# 99| 0: [LocalVariableAccess] access to local variable x -# 100| 2: [ExprStmt] ...; -# 100| 0: [MethodCall] call to method Sink -# 100| 0: [LocalVariableAccess] access to local variable y -# 101| 3: [BreakStmt] break; -# 105| 11: [Method] Sink<> -# 105| -1: [TypeMention] Void +# 95| 0: [Parameter] value +# 97| 10: [Method] M5 +# 97| -1: [TypeMention] Void +# 98| 4: [BlockStmt] {...} +# 99| 0: [LocalVariableDeclStmt] ... ...; +# 99| 0: [LocalVariableDeclAndInitExpr] String o = ... +# 99| -1: [TypeMention] string +# 99| 0: [LocalVariableAccess] access to local variable o +# 99| 1: [MethodCall] call to method Source +# 99| 0: [CastExpr] (...) ... +# 99| 1: [IntLiteral] 9 +# 100| 1: [LocalVariableDeclStmt] ... ...; +# 100| 0: [LocalVariableDeclAndInitExpr] R1 r = ... +# 100| -1: [TypeMention] R1 +# 100| 0: [LocalVariableAccess] access to local variable r +# 100| 1: [ObjectCreation] object creation of type R1 +# 100| -1: [TypeMention] R1 +# 100| 0: [LocalVariableAccess] access to local variable o +# 100| 1: [IntLiteral] 1 +# 101| 2: [ExprStmt] ...; +# 101| 0: [MethodCall] call to method Sink +# 101| 0: [PropertyCall] access to property i +# 101| -1: [LocalVariableAccess] access to local variable r +# 103| 3: [ExprStmt] ...; +# 103| 0: [AssignExpr] ... = ... +# 103| 0: [TupleExpr] (..., ...) +# 103| 0: [LocalVariableDeclExpr] String a +# 103| 1: [LocalVariableDeclExpr] Int32 b +# 103| 1: [LocalVariableAccess] access to local variable r +# 104| 4: [ExprStmt] ...; +# 104| 0: [MethodCall] call to method Sink +# 104| 0: [LocalVariableAccess] access to local variable a +# 105| 5: [ExprStmt] ...; +# 105| 0: [MethodCall] call to method Sink +# 105| 0: [CastExpr] (...) ... +# 105| 1: [LocalVariableAccess] access to local variable b +# 107| 6: [SwitchStmt] switch (...) {...} +# 107| 0: [LocalVariableAccess] access to local variable r +# 109| 0: [CaseStmt] case ...: +# 109| 0: [TupleExpr] (..., ...) +# 109| 0: [VariablePatternExpr] String x +# 109| 1: [VariablePatternExpr] Int32 y +# 110| 1: [ExprStmt] ...; +# 110| 0: [MethodCall] call to method Sink +# 110| 0: [LocalVariableAccess] access to local variable x +# 111| 2: [ExprStmt] ...; +# 111| 0: [MethodCall] call to method Sink +# 111| 0: [CastExpr] (...) ... +# 111| 1: [LocalVariableAccess] access to local variable y +# 112| 3: [BreakStmt] break; +# 116| 11: [Method] M6 +# 116| -1: [TypeMention] Void +# 117| 4: [BlockStmt] {...} +# 118| 0: [LocalVariableDeclStmt] ... ...; +# 118| 0: [LocalVariableDeclAndInitExpr] Object o = ... +# 118| -1: [TypeMention] object +# 118| 0: [LocalVariableAccess] access to local variable o +# 118| 1: [MethodCall] call to method Source +# 118| 0: [CastExpr] (...) ... +# 118| 1: [IntLiteral] 9 +# 120| 1: [LocalVariableDeclStmt] ... ...; +# 120| 0: [LocalVariableDeclAndInitExpr] Int32 y1 = ... +# 120| -1: [TypeMention] int +# 120| 0: [LocalVariableAccess] access to local variable y1 +# 120| 1: [IntLiteral] 0 +# 121| 2: [ExprStmt] ...; +# 121| 0: [AssignExpr] ... = ... +# 121| 0: [TupleExpr] (..., ...) +# 121| 0: [LocalVariableDeclExpr] Object x1 +# 121| 1: [LocalVariableAccess] access to local variable y1 +# 121| 1: [TupleExpr] (..., ...) +# 121| 0: [LocalVariableAccess] access to local variable o +# 121| 1: [IntLiteral] 1 +# 122| 3: [ExprStmt] ...; +# 122| 0: [MethodCall] call to method Sink +# 122| 0: [LocalVariableAccess] access to local variable x1 +# 124| 4: [LocalVariableDeclStmt] ... ...; +# 124| 0: [LocalVariableDeclAndInitExpr] Object x2 = ... +# 124| -1: [TypeMention] object +# 124| 0: [LocalVariableAccess] access to local variable x2 +# 124| 1: [ObjectCreation] object creation of type Object +# 124| 0: [TypeMention] object +# 125| 5: [ExprStmt] ...; +# 125| 0: [AssignExpr] ... = ... +# 125| 0: [TupleExpr] (..., ...) +# 125| 0: [LocalVariableAccess] access to local variable x2 +# 125| 1: [LocalVariableDeclExpr] Int32 y2 +# 125| 1: [TupleExpr] (..., ...) +# 125| 0: [LocalVariableAccess] access to local variable o +# 125| 1: [IntLiteral] 1 +# 126| 6: [ExprStmt] ...; +# 126| 0: [MethodCall] call to method Sink +# 126| 0: [LocalVariableAccess] access to local variable x2 +# 128| 7: [LocalVariableDeclStmt] ... ...; +# 128| 0: [LocalVariableDeclAndInitExpr] Int32 x3 = ... +# 128| -1: [TypeMention] int +# 128| 0: [LocalVariableAccess] access to local variable x3 +# 128| 1: [IntLiteral] 0 +# 129| 8: [ExprStmt] ...; +# 129| 0: [AssignExpr] ... = ... +# 129| 0: [TupleExpr] (..., ...) +# 129| 0: [LocalVariableAccess] access to local variable x3 +# 129| 1: [LocalVariableDeclExpr] Object y3 +# 129| 1: [TupleExpr] (..., ...) +# 129| 0: [IntLiteral] 1 +# 129| 1: [LocalVariableAccess] access to local variable o +# 130| 9: [ExprStmt] ...; +# 130| 0: [MethodCall] call to method Sink +# 130| 0: [LocalVariableAccess] access to local variable y3 +# 132| 10: [LocalVariableDeclStmt] ... ...; +# 132| 0: [LocalVariableDeclAndInitExpr] Object y4 = ... +# 132| -1: [TypeMention] object +# 132| 0: [LocalVariableAccess] access to local variable y4 +# 132| 1: [ObjectCreation] object creation of type Object +# 132| 0: [TypeMention] object +# 133| 11: [ExprStmt] ...; +# 133| 0: [AssignExpr] ... = ... +# 133| 0: [TupleExpr] (..., ...) +# 133| 0: [LocalVariableDeclExpr] Int32 x4 +# 133| 1: [LocalVariableAccess] access to local variable y4 +# 133| 1: [TupleExpr] (..., ...) +# 133| 0: [IntLiteral] 1 +# 133| 1: [LocalVariableAccess] access to local variable o +# 134| 12: [ExprStmt] ...; +# 134| 0: [MethodCall] call to method Sink +# 134| 0: [LocalVariableAccess] access to local variable y4 +# 137| 12: [Method] Sink +# 137| -1: [TypeMention] Void +#-----| 2: (Parameters) +# 137| 0: [Parameter] o +# 137| -1: [TypeMention] object +# 137| 4: [BlockStmt] {...} +# 139| 13: [Method] Source<> +# 139| -1: [TypeMention] T #-----| 1: (Type parameters) -# 105| 0: [TypeParameter] T +# 139| 0: [TypeParameter] T #-----| 2: (Parameters) -# 105| 0: [Parameter] x -# 105| -1: [TypeMention] T -# 105| 4: [BlockStmt] {...} -# 108| [NamespaceDeclaration] namespace ... { ... } -# 110| 1: [Class] IsExternalInit +# 139| 0: [Parameter] source +# 139| -1: [TypeMention] object +# 139| 4: [ThrowExpr] throw ... +# 139| 0: [NullLiteral] null +# 142| [NamespaceDeclaration] namespace ... { ... } +# 144| 1: [Class] IsExternalInit diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs index ca3faf85f89..a57bd0ccc7a 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs @@ -4,71 +4,81 @@ class Tuples { static void M1() { - var x = (a: "taint source", (1, "taint source")); + var o1 = Source(1); + var o2 = Source(2); + + var x = (a: o1, (1, o2)); var (a, (b, c)) = x; - Sink(a); // Tainted + Sink(a); // $ hasValueFlow=1 Sink(b); - Sink(c); // Tainted + Sink(c); // $ hasValueFlow=2 (a, (b, c)) = x; - Sink(a); // Tainted + Sink(a); // $ hasValueFlow=1 Sink(b); - Sink(c); // Tainted + Sink(c); // $ hasValueFlow=2 (var p, var q) = x; - Sink(p); // Tainted + Sink(p); // $ hasValueFlow=1 Sink(q.Item1); - Sink(q.Item2); // Tainted + Sink(q.Item2); // $ hasValueFlow=2 - Sink(x.Item1); // Tainted - Sink(x.a); // Tainted + Sink(x.Item1); // $ hasValueFlow=1 + Sink(x.a); // $ hasValueFlow=1 Sink(x.Item2.Item1); - Sink(x.Item2.Item2); // Tainted + Sink(x.Item2.Item2); // $ hasValueFlow=2 } static void M2() { - var x = ("taint source", 2, 3, 4, 5, 6, 7, 8, 9, "taint source"); - Sink(x.Item1); // Tainted + var o1 = Source(3); + var o2 = Source(4); + + var x = (o1, 2, 3, 4, 5, 6, 7, 8, 9, o2); + Sink(x.Item1); // $ hasValueFlow=3 Sink(x.Item2); - Sink(x.Item10); // Tainted + Sink(x.Item10); // $ hasValueFlow=4 } static void M3() { - var x = (ValueTuple)("taint source", 2, 3); - Sink(x.Item1); // Tainted + var o = Source(5); + var x = (ValueTuple)(o, 2, 3); + Sink(x.Item1); // $ hasValueFlow=5 Sink(x.Item2); - var y = (ValueTuple)("taint source", 2, 3); - Sink(y.Item1); // Tainted, not found + var y = (ValueTuple)(o, 2, 3); + Sink(y.Item1); // $ MISSING: hasValueFlow=5 Sink(y.Item2); } static void M4(string s) { - var x = ("taint source", (2, "taint source"), 3); + var o1 = Source(6); + var o2 = Source(7); + var x = (o1, (2, o2), 3); switch (x) { case ValueTuple t when t.Item3 > 1: - Sink(t.Item1); // Tainted - Sink(t.Item2.Item2); // Tainted + Sink(t.Item1); // $ hasValueFlow=6 + Sink(t.Item2.Item2); // $ hasValueFlow=7 Sink(t.Item2.Item1); break; case var (a, (b, c), _): - Sink(a); // Tainted - Sink(c); // Tainted + Sink(a); // $ hasValueFlow=6 + Sink(c); // $ hasValueFlow=7 Sink(b); break; } + var o3 = Source(8); var y = (s, (2, s), 3); switch (y) { - case ("taint source", var (b, c), _): - Sink(y.Item1); // Tainted, not found - Sink(y.Item2.Item2); // Tainted, not found - Sink(c); // Tainted, not found + case (var a, var (b, c), _) when a == o3: + Sink(y.Item1); // $ MISSING: hasValueFlow=8 + Sink(y.Item2.Item2); // $ MISSING: hasValueFlow=8 + Sink(c); // $ MISSING: hasValueFlow=8 Sink(y.Item2.Item1); Sink(b); break; @@ -76,8 +86,8 @@ class Tuples if (x is var (p, (q, r), _)) { - Sink(p); // Tainted - Sink(r); // Tainted + Sink(p); // $ hasValueFlow=6 + Sink(r); // $ hasValueFlow=7 Sink(q); } } @@ -86,23 +96,47 @@ class Tuples static void M5() { - var r = new R1("taint source", 1); - Sink(r.i); // Tainted + var o = Source(9); + var r = new R1(o, 1); + Sink(r.i); // $ hasValueFlow=9 var (a, b) = r; - Sink(a); // Tainted, not found + Sink(a); // $ MISSING: hasValueFlow=9 Sink(b); switch (r) { case var (x, y): - Sink(x); // Tainted, not found + Sink(x); // $ MISSING: hasValueFlow=9 Sink(y); break; } } - static void Sink(T x) { } + static void M6() + { + var o = Source(9); + + int y1 = 0; + (object x1, y1) = (o, 1); + Sink(x1); // $ hasValueFlow=9 + + var x2 = new object(); + (x2, int y2) = (o, 1); + Sink(x2); // $ hasValueFlow=9 + + var x3 = 0; + (x3, object y3) = (1, o); + Sink(y3); // $ hasValueFlow=9 + + var y4 = new object(); + (int x4, y4) = (1, o); + Sink(y4); // $ hasValueFlow=9 + } + + public static void Sink(object o) { } + + static T Source(object source) => throw null; } namespace System.Runtime.CompilerServices diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected index 733387c87c5..7a727bd245c 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected @@ -1,167 +1,438 @@ +failures edges -| Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | Tuples.cs:8:9:8:23 | (..., ...) [field Item1] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | Tuples.cs:13:9:13:19 | (..., ...) [field Item1] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | Tuples.cs:18:9:18:22 | (..., ...) [field Item1] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | Tuples.cs:23:14:23:14 | access to local variable x [field Item1] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | Tuples.cs:24:14:24:14 | access to local variable x [field Item1] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:8:9:8:23 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:13:9:13:19 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:18:9:18:22 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:26:14:26:14 | access to local variable x [field Item2, field Item2] : String | -| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | -| Tuples.cs:7:37:7:55 | (..., ...) [field Item2] : String | Tuples.cs:7:17:7:56 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:37:7:55 | (..., ...) [field Item2] : String | -| Tuples.cs:8:9:8:23 | (..., ...) [field Item1] : String | Tuples.cs:8:9:8:27 | SSA def(a) : String | -| Tuples.cs:8:9:8:23 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:8:9:8:23 | (..., ...) [field Item2] : String | -| Tuples.cs:8:9:8:23 | (..., ...) [field Item2] : String | Tuples.cs:8:9:8:27 | SSA def(c) : String | -| Tuples.cs:8:9:8:27 | SSA def(a) : String | Tuples.cs:9:14:9:14 | access to local variable a | -| Tuples.cs:8:9:8:27 | SSA def(c) : String | Tuples.cs:11:14:11:14 | access to local variable c | -| Tuples.cs:13:9:13:19 | (..., ...) [field Item1] : String | Tuples.cs:13:9:13:23 | SSA def(a) : String | -| Tuples.cs:13:9:13:19 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:13:13:13:18 | (..., ...) [field Item2] : String | -| Tuples.cs:13:9:13:23 | SSA def(a) : String | Tuples.cs:14:14:14:14 | access to local variable a | -| Tuples.cs:13:9:13:23 | SSA def(c) : String | Tuples.cs:16:14:16:14 | access to local variable c | -| Tuples.cs:13:13:13:18 | (..., ...) [field Item2] : String | Tuples.cs:13:9:13:23 | SSA def(c) : String | -| Tuples.cs:18:9:18:22 | (..., ...) [field Item1] : String | Tuples.cs:18:9:18:26 | SSA def(p) : String | -| Tuples.cs:18:9:18:22 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:18:9:18:26 | SSA def(q) [field Item2] : String | -| Tuples.cs:18:9:18:26 | SSA def(p) : String | Tuples.cs:19:14:19:14 | access to local variable p | -| Tuples.cs:18:9:18:26 | SSA def(q) [field Item2] : String | Tuples.cs:21:14:21:14 | access to local variable q [field Item2] : String | -| Tuples.cs:21:14:21:14 | access to local variable q [field Item2] : String | Tuples.cs:21:14:21:20 | access to field Item2 | -| Tuples.cs:23:14:23:14 | access to local variable x [field Item1] : String | Tuples.cs:23:14:23:20 | access to field Item1 | -| Tuples.cs:24:14:24:14 | access to local variable x [field Item1] : String | Tuples.cs:24:14:24:16 | access to field Item1 | -| Tuples.cs:26:14:26:14 | access to local variable x [field Item2, field Item2] : String | Tuples.cs:26:14:26:20 | access to field Item2 [field Item2] : String | -| Tuples.cs:26:14:26:20 | access to field Item2 [field Item2] : String | Tuples.cs:26:14:26:26 | access to field Item2 | -| Tuples.cs:31:17:31:72 | (..., ...) [field Item1] : String | Tuples.cs:32:14:32:14 | access to local variable x [field Item1] : String | -| Tuples.cs:31:17:31:72 | (..., ...) [field Item10] : String | Tuples.cs:34:14:34:14 | access to local variable x [field Item10] : String | -| Tuples.cs:31:18:31:31 | "taint source" : String | Tuples.cs:31:17:31:72 | (..., ...) [field Item1] : String | -| Tuples.cs:31:58:31:71 | "taint source" : String | Tuples.cs:31:17:31:72 | (..., ...) [field Item10] : String | -| Tuples.cs:32:14:32:14 | access to local variable x [field Item1] : String | Tuples.cs:32:14:32:20 | access to field Item1 | -| Tuples.cs:34:14:34:14 | access to local variable x [field Item10] : String | Tuples.cs:34:14:34:21 | access to field Item10 | -| Tuples.cs:39:17:39:68 | (...) ... [field Item1] : String | Tuples.cs:40:14:40:14 | access to local variable x [field Item1] : String | -| Tuples.cs:39:47:39:68 | (..., ...) [field Item1] : String | Tuples.cs:39:17:39:68 | (...) ... [field Item1] : String | -| Tuples.cs:39:48:39:61 | "taint source" : String | Tuples.cs:39:47:39:68 | (..., ...) [field Item1] : String | -| Tuples.cs:40:14:40:14 | access to local variable x [field Item1] : String | Tuples.cs:40:14:40:20 | access to field Item1 | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item1] : String | Tuples.cs:53:18:53:57 | SSA def(t) [field Item1] : String | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item1] : String | Tuples.cs:58:18:58:35 | (..., ...) [field Item1] : String | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item1] : String | Tuples.cs:77:18:77:35 | (..., ...) [field Item1] : String | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:53:18:53:57 | SSA def(t) [field Item2, field Item2] : String | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:58:18:58:35 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:77:18:77:35 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:17:50:56 | (..., ...) [field Item1] : String | -| Tuples.cs:50:34:50:52 | (..., ...) [field Item2] : String | Tuples.cs:50:17:50:56 | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:34:50:52 | (..., ...) [field Item2] : String | -| Tuples.cs:53:18:53:57 | SSA def(t) [field Item1] : String | Tuples.cs:54:22:54:22 | access to local variable t [field Item1] : String | -| Tuples.cs:53:18:53:57 | SSA def(t) [field Item2, field Item2] : String | Tuples.cs:55:22:55:22 | access to local variable t [field Item2, field Item2] : String | -| Tuples.cs:54:22:54:22 | access to local variable t [field Item1] : String | Tuples.cs:54:22:54:28 | access to field Item1 | -| Tuples.cs:55:22:55:22 | access to local variable t [field Item2, field Item2] : String | Tuples.cs:55:22:55:28 | access to field Item2 [field Item2] : String | -| Tuples.cs:55:22:55:28 | access to field Item2 [field Item2] : String | Tuples.cs:55:22:55:34 | access to field Item2 | -| Tuples.cs:58:18:58:35 | (..., ...) [field Item1] : String | Tuples.cs:58:23:58:23 | SSA def(a) : String | -| Tuples.cs:58:18:58:35 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:58:18:58:35 | (..., ...) [field Item2] : String | -| Tuples.cs:58:18:58:35 | (..., ...) [field Item2] : String | Tuples.cs:58:30:58:30 | SSA def(c) : String | -| Tuples.cs:58:23:58:23 | SSA def(a) : String | Tuples.cs:59:22:59:22 | access to local variable a | -| Tuples.cs:58:30:58:30 | SSA def(c) : String | Tuples.cs:60:22:60:22 | access to local variable c | -| Tuples.cs:77:18:77:35 | (..., ...) [field Item1] : String | Tuples.cs:77:23:77:23 | SSA def(p) : String | -| Tuples.cs:77:18:77:35 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:77:18:77:35 | (..., ...) [field Item2] : String | -| Tuples.cs:77:18:77:35 | (..., ...) [field Item2] : String | Tuples.cs:77:30:77:30 | SSA def(r) : String | -| Tuples.cs:77:23:77:23 | SSA def(p) : String | Tuples.cs:79:18:79:18 | access to local variable p | -| Tuples.cs:77:30:77:30 | SSA def(r) : String | Tuples.cs:80:18:80:18 | access to local variable r | -| Tuples.cs:89:17:89:41 | object creation of type R1 [property i] : String | Tuples.cs:90:14:90:14 | access to local variable r [property i] : String | -| Tuples.cs:89:24:89:37 | "taint source" : String | Tuples.cs:89:17:89:41 | object creation of type R1 [property i] : String | -| Tuples.cs:90:14:90:14 | access to local variable r [property i] : String | Tuples.cs:90:14:90:16 | access to property i | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x [field Item2, field Item2] : Object | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | +| Tuples.cs:10:25:10:31 | (..., ...) [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:25:10:31 | (..., ...) [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) [field Item2] : Object | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) [field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) [field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) [field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) [field Item2] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) [field Item2] : Object | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | +| Tuples.cs:16:13:16:18 | (..., ...) [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | +| Tuples.cs:16:13:16:18 | (..., ...) [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) [field Item2] : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) [field Item2] : Object | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | +| Tuples.cs:21:9:21:26 | SSA def(q) [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q [field Item2] : Object | +| Tuples.cs:21:9:21:26 | SSA def(q) [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q [field Item2] : Object | +| Tuples.cs:24:14:24:14 | access to local variable q [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | +| Tuples.cs:24:14:24:14 | access to local variable q [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | +| Tuples.cs:26:14:26:14 | access to local variable x [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | +| Tuples.cs:26:14:26:14 | access to local variable x [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | +| Tuples.cs:27:14:27:14 | access to local variable x [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | +| Tuples.cs:27:14:27:14 | access to local variable x [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | +| Tuples.cs:29:14:29:14 | access to local variable x [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 [field Item2] : Object | +| Tuples.cs:29:14:29:14 | access to local variable x [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 [field Item2] : Object | +| Tuples.cs:29:14:29:20 | access to field Item2 [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | +| Tuples.cs:29:14:29:20 | access to field Item2 [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x [field Item1] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x [field Item1] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x [field Item10] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x [field Item10] : Object | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) [field Item1] : Object | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) [field Item1] : Object | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) [field Item10] : Object | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) [field Item10] : Object | +| Tuples.cs:38:14:38:14 | access to local variable x [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | +| Tuples.cs:38:14:38:14 | access to local variable x [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | +| Tuples.cs:40:14:40:14 | access to local variable x [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | +| Tuples.cs:40:14:40:14 | access to local variable x [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | +| Tuples.cs:46:17:46:55 | (...) ... [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x [field Item1] : String | +| Tuples.cs:46:17:46:55 | (...) ... [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x [field Item1] : String | +| Tuples.cs:46:47:46:55 | (..., ...) [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... [field Item1] : String | +| Tuples.cs:46:47:46:55 | (..., ...) [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... [field Item1] : String | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) [field Item1] : String | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) [field Item1] : String | +| Tuples.cs:47:14:47:14 | access to local variable x [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | +| Tuples.cs:47:14:47:14 | access to local variable x [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | +| Tuples.cs:59:22:59:28 | (..., ...) [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:22:59:28 | (..., ...) [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) [field Item2] : String | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) [field Item2] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t [field Item1] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t [field Item1] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t [field Item2, field Item2] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t [field Item2, field Item2] : String | +| Tuples.cs:63:22:63:22 | access to local variable t [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | +| Tuples.cs:63:22:63:22 | access to local variable t [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | +| Tuples.cs:64:22:64:22 | access to local variable t [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 [field Item2] : String | +| Tuples.cs:64:22:64:22 | access to local variable t [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 [field Item2] : String | +| Tuples.cs:64:22:64:28 | access to field Item2 [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | +| Tuples.cs:64:22:64:28 | access to field Item2 [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) [field Item2] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) [field Item2] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) [field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) [field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | +| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | +| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | +| Tuples.cs:100:17:100:28 | object creation of type R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r [property i] : String | +| Tuples.cs:100:17:100:28 | object creation of type R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 [property i] : String | +| Tuples.cs:101:14:101:14 | access to local variable r [property i] : String | Tuples.cs:101:14:101:16 | access to property i | +| Tuples.cs:101:14:101:14 | access to local variable r [property i] : String | Tuples.cs:101:14:101:16 | access to property i | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | +| Tuples.cs:121:9:121:23 | (..., ...) [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | +| Tuples.cs:121:9:121:23 | (..., ...) [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | +| Tuples.cs:121:27:121:32 | (..., ...) [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) [field Item1] : Object | +| Tuples.cs:121:27:121:32 | (..., ...) [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) [field Item1] : Object | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) [field Item1] : Object | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) [field Item1] : Object | +| Tuples.cs:125:9:125:20 | (..., ...) [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | +| Tuples.cs:125:9:125:20 | (..., ...) [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | +| Tuples.cs:125:24:125:29 | (..., ...) [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) [field Item1] : Object | +| Tuples.cs:125:24:125:29 | (..., ...) [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) [field Item1] : Object | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) [field Item1] : Object | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) [field Item1] : Object | +| Tuples.cs:129:9:129:23 | (..., ...) [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | +| Tuples.cs:129:9:129:23 | (..., ...) [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | +| Tuples.cs:129:27:129:32 | (..., ...) [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) [field Item2] : Object | +| Tuples.cs:129:27:129:32 | (..., ...) [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) [field Item2] : Object | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) [field Item2] : Object | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) [field Item2] : Object | +| Tuples.cs:133:9:133:20 | (..., ...) [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | +| Tuples.cs:133:9:133:20 | (..., ...) [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | +| Tuples.cs:133:24:133:29 | (..., ...) [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) [field Item2] : Object | +| Tuples.cs:133:24:133:29 | (..., ...) [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) [field Item2] : Object | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) [field Item2] : Object | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) [field Item2] : Object | nodes -| Tuples.cs:7:17:7:56 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:7:17:7:56 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:7:21:7:34 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:7:37:7:55 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | -| Tuples.cs:7:41:7:54 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:8:9:8:23 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:8:9:8:23 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:8:9:8:23 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | -| Tuples.cs:8:9:8:27 | SSA def(a) : String | semmle.label | SSA def(a) : String | -| Tuples.cs:8:9:8:27 | SSA def(c) : String | semmle.label | SSA def(c) : String | -| Tuples.cs:9:14:9:14 | access to local variable a | semmle.label | access to local variable a | -| Tuples.cs:11:14:11:14 | access to local variable c | semmle.label | access to local variable c | -| Tuples.cs:13:9:13:19 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:13:9:13:19 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:13:9:13:23 | SSA def(a) : String | semmle.label | SSA def(a) : String | -| Tuples.cs:13:9:13:23 | SSA def(c) : String | semmle.label | SSA def(c) : String | -| Tuples.cs:13:13:13:18 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | -| Tuples.cs:14:14:14:14 | access to local variable a | semmle.label | access to local variable a | -| Tuples.cs:16:14:16:14 | access to local variable c | semmle.label | access to local variable c | -| Tuples.cs:18:9:18:22 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:18:9:18:22 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:18:9:18:26 | SSA def(p) : String | semmle.label | SSA def(p) : String | -| Tuples.cs:18:9:18:26 | SSA def(q) [field Item2] : String | semmle.label | SSA def(q) [field Item2] : String | -| Tuples.cs:19:14:19:14 | access to local variable p | semmle.label | access to local variable p | -| Tuples.cs:21:14:21:14 | access to local variable q [field Item2] : String | semmle.label | access to local variable q [field Item2] : String | -| Tuples.cs:21:14:21:20 | access to field Item2 | semmle.label | access to field Item2 | -| Tuples.cs:23:14:23:14 | access to local variable x [field Item1] : String | semmle.label | access to local variable x [field Item1] : String | -| Tuples.cs:23:14:23:20 | access to field Item1 | semmle.label | access to field Item1 | -| Tuples.cs:24:14:24:14 | access to local variable x [field Item1] : String | semmle.label | access to local variable x [field Item1] : String | -| Tuples.cs:24:14:24:16 | access to field Item1 | semmle.label | access to field Item1 | -| Tuples.cs:26:14:26:14 | access to local variable x [field Item2, field Item2] : String | semmle.label | access to local variable x [field Item2, field Item2] : String | -| Tuples.cs:26:14:26:20 | access to field Item2 [field Item2] : String | semmle.label | access to field Item2 [field Item2] : String | -| Tuples.cs:26:14:26:26 | access to field Item2 | semmle.label | access to field Item2 | -| Tuples.cs:31:17:31:72 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:31:17:31:72 | (..., ...) [field Item10] : String | semmle.label | (..., ...) [field Item10] : String | -| Tuples.cs:31:18:31:31 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:31:58:31:71 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:32:14:32:14 | access to local variable x [field Item1] : String | semmle.label | access to local variable x [field Item1] : String | -| Tuples.cs:32:14:32:20 | access to field Item1 | semmle.label | access to field Item1 | -| Tuples.cs:34:14:34:14 | access to local variable x [field Item10] : String | semmle.label | access to local variable x [field Item10] : String | -| Tuples.cs:34:14:34:21 | access to field Item10 | semmle.label | access to field Item10 | -| Tuples.cs:39:17:39:68 | (...) ... [field Item1] : String | semmle.label | (...) ... [field Item1] : String | -| Tuples.cs:39:47:39:68 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:39:48:39:61 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:40:14:40:14 | access to local variable x [field Item1] : String | semmle.label | access to local variable x [field Item1] : String | -| Tuples.cs:40:14:40:20 | access to field Item1 | semmle.label | access to field Item1 | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:50:17:50:56 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:50:18:50:31 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:50:34:50:52 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | -| Tuples.cs:50:38:50:51 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:53:18:53:57 | SSA def(t) [field Item1] : String | semmle.label | SSA def(t) [field Item1] : String | -| Tuples.cs:53:18:53:57 | SSA def(t) [field Item2, field Item2] : String | semmle.label | SSA def(t) [field Item2, field Item2] : String | -| Tuples.cs:54:22:54:22 | access to local variable t [field Item1] : String | semmle.label | access to local variable t [field Item1] : String | -| Tuples.cs:54:22:54:28 | access to field Item1 | semmle.label | access to field Item1 | -| Tuples.cs:55:22:55:22 | access to local variable t [field Item2, field Item2] : String | semmle.label | access to local variable t [field Item2, field Item2] : String | -| Tuples.cs:55:22:55:28 | access to field Item2 [field Item2] : String | semmle.label | access to field Item2 [field Item2] : String | -| Tuples.cs:55:22:55:34 | access to field Item2 | semmle.label | access to field Item2 | -| Tuples.cs:58:18:58:35 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:58:18:58:35 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:58:18:58:35 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | -| Tuples.cs:58:23:58:23 | SSA def(a) : String | semmle.label | SSA def(a) : String | -| Tuples.cs:58:30:58:30 | SSA def(c) : String | semmle.label | SSA def(c) : String | -| Tuples.cs:59:22:59:22 | access to local variable a | semmle.label | access to local variable a | -| Tuples.cs:60:22:60:22 | access to local variable c | semmle.label | access to local variable c | -| Tuples.cs:77:18:77:35 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | -| Tuples.cs:77:18:77:35 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | -| Tuples.cs:77:18:77:35 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | -| Tuples.cs:77:23:77:23 | SSA def(p) : String | semmle.label | SSA def(p) : String | -| Tuples.cs:77:30:77:30 | SSA def(r) : String | semmle.label | SSA def(r) : String | -| Tuples.cs:79:18:79:18 | access to local variable p | semmle.label | access to local variable p | -| Tuples.cs:80:18:80:18 | access to local variable r | semmle.label | access to local variable r | -| Tuples.cs:89:17:89:41 | object creation of type R1 [property i] : String | semmle.label | object creation of type R1 [property i] : String | -| Tuples.cs:89:24:89:37 | "taint source" : String | semmle.label | "taint source" : String | -| Tuples.cs:90:14:90:14 | access to local variable r [property i] : String | semmle.label | access to local variable r [property i] : String | -| Tuples.cs:90:14:90:16 | access to property i | semmle.label | access to property i | +| Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:8:18:8:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:8:18:8:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:17:10:32 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| Tuples.cs:10:25:10:31 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:10:25:10:31 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:11:9:11:23 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | +| Tuples.cs:12:14:12:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:12:14:12:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:14:14:14:14 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:14:14:14:14 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:16:9:16:19 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | semmle.label | SSA def(a) : Object | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | semmle.label | SSA def(c) : Object | +| Tuples.cs:16:13:16:18 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:16:13:16:18 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:17:14:17:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:17:14:17:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:19:14:19:14 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:19:14:19:14 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:21:9:21:22 | (..., ...) [field Item2, field Item2] : Object | semmle.label | (..., ...) [field Item2, field Item2] : Object | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | semmle.label | SSA def(p) : Object | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | semmle.label | SSA def(p) : Object | +| Tuples.cs:21:9:21:26 | SSA def(q) [field Item2] : Object | semmle.label | SSA def(q) [field Item2] : Object | +| Tuples.cs:21:9:21:26 | SSA def(q) [field Item2] : Object | semmle.label | SSA def(q) [field Item2] : Object | +| Tuples.cs:22:14:22:14 | access to local variable p | semmle.label | access to local variable p | +| Tuples.cs:22:14:22:14 | access to local variable p | semmle.label | access to local variable p | +| Tuples.cs:24:14:24:14 | access to local variable q [field Item2] : Object | semmle.label | access to local variable q [field Item2] : Object | +| Tuples.cs:24:14:24:14 | access to local variable q [field Item2] : Object | semmle.label | access to local variable q [field Item2] : Object | +| Tuples.cs:24:14:24:20 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:24:14:24:20 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:26:14:26:14 | access to local variable x [field Item1] : Object | semmle.label | access to local variable x [field Item1] : Object | +| Tuples.cs:26:14:26:14 | access to local variable x [field Item1] : Object | semmle.label | access to local variable x [field Item1] : Object | +| Tuples.cs:26:14:26:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:26:14:26:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:27:14:27:14 | access to local variable x [field Item1] : Object | semmle.label | access to local variable x [field Item1] : Object | +| Tuples.cs:27:14:27:14 | access to local variable x [field Item1] : Object | semmle.label | access to local variable x [field Item1] : Object | +| Tuples.cs:27:14:27:16 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:27:14:27:16 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:29:14:29:14 | access to local variable x [field Item2, field Item2] : Object | semmle.label | access to local variable x [field Item2, field Item2] : Object | +| Tuples.cs:29:14:29:14 | access to local variable x [field Item2, field Item2] : Object | semmle.label | access to local variable x [field Item2, field Item2] : Object | +| Tuples.cs:29:14:29:20 | access to field Item2 [field Item2] : Object | semmle.label | access to field Item2 [field Item2] : Object | +| Tuples.cs:29:14:29:20 | access to field Item2 [field Item2] : Object | semmle.label | access to field Item2 [field Item2] : Object | +| Tuples.cs:29:14:29:26 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:29:14:29:26 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:34:18:34:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:34:18:34:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:35:18:35:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:35:18:35:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item10] : Object | semmle.label | (..., ...) [field Item10] : Object | +| Tuples.cs:37:17:37:48 | (..., ...) [field Item10] : Object | semmle.label | (..., ...) [field Item10] : Object | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| Tuples.cs:38:14:38:14 | access to local variable x [field Item1] : Object | semmle.label | access to local variable x [field Item1] : Object | +| Tuples.cs:38:14:38:14 | access to local variable x [field Item1] : Object | semmle.label | access to local variable x [field Item1] : Object | +| Tuples.cs:38:14:38:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:38:14:38:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:40:14:40:14 | access to local variable x [field Item10] : Object | semmle.label | access to local variable x [field Item10] : Object | +| Tuples.cs:40:14:40:14 | access to local variable x [field Item10] : Object | semmle.label | access to local variable x [field Item10] : Object | +| Tuples.cs:40:14:40:21 | access to field Item10 | semmle.label | access to field Item10 | +| Tuples.cs:40:14:40:21 | access to field Item10 | semmle.label | access to field Item10 | +| Tuples.cs:45:17:45:33 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:45:17:45:33 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:46:17:46:55 | (...) ... [field Item1] : String | semmle.label | (...) ... [field Item1] : String | +| Tuples.cs:46:17:46:55 | (...) ... [field Item1] : String | semmle.label | (...) ... [field Item1] : String | +| Tuples.cs:46:47:46:55 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:46:47:46:55 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:46:48:46:48 | access to local variable o : String | semmle.label | access to local variable o : String | +| Tuples.cs:46:48:46:48 | access to local variable o : String | semmle.label | access to local variable o : String | +| Tuples.cs:47:14:47:14 | access to local variable x [field Item1] : String | semmle.label | access to local variable x [field Item1] : String | +| Tuples.cs:47:14:47:14 | access to local variable x [field Item1] : String | semmle.label | access to local variable x [field Item1] : String | +| Tuples.cs:47:14:47:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:47:14:47:20 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:57:18:57:34 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:57:18:57:34 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:58:18:58:34 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:58:18:58:34 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:17:59:32 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:59:22:59:28 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | +| Tuples.cs:59:22:59:28 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item1] : String | semmle.label | SSA def(t) [field Item1] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item1] : String | semmle.label | SSA def(t) [field Item1] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item2, field Item2] : String | semmle.label | SSA def(t) [field Item2, field Item2] : String | +| Tuples.cs:62:18:62:57 | SSA def(t) [field Item2, field Item2] : String | semmle.label | SSA def(t) [field Item2, field Item2] : String | +| Tuples.cs:63:22:63:22 | access to local variable t [field Item1] : String | semmle.label | access to local variable t [field Item1] : String | +| Tuples.cs:63:22:63:22 | access to local variable t [field Item1] : String | semmle.label | access to local variable t [field Item1] : String | +| Tuples.cs:63:22:63:28 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:63:22:63:28 | access to field Item1 | semmle.label | access to field Item1 | +| Tuples.cs:64:22:64:22 | access to local variable t [field Item2, field Item2] : String | semmle.label | access to local variable t [field Item2, field Item2] : String | +| Tuples.cs:64:22:64:22 | access to local variable t [field Item2, field Item2] : String | semmle.label | access to local variable t [field Item2, field Item2] : String | +| Tuples.cs:64:22:64:28 | access to field Item2 [field Item2] : String | semmle.label | access to field Item2 [field Item2] : String | +| Tuples.cs:64:22:64:28 | access to field Item2 [field Item2] : String | semmle.label | access to field Item2 [field Item2] : String | +| Tuples.cs:64:22:64:34 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:64:22:64:34 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | +| Tuples.cs:67:18:67:35 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | semmle.label | SSA def(a) : String | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | semmle.label | SSA def(a) : String | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | semmle.label | SSA def(c) : String | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | semmle.label | SSA def(c) : String | +| Tuples.cs:68:22:68:22 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:68:22:68:22 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:69:22:69:22 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:69:22:69:22 | access to local variable c | semmle.label | access to local variable c | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item1] : String | semmle.label | (..., ...) [field Item1] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2, field Item2] : String | semmle.label | (..., ...) [field Item2, field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | +| Tuples.cs:87:18:87:35 | (..., ...) [field Item2] : String | semmle.label | (..., ...) [field Item2] : String | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | semmle.label | SSA def(p) : String | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | semmle.label | SSA def(p) : String | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | semmle.label | SSA def(r) : String | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | semmle.label | SSA def(r) : String | +| Tuples.cs:89:18:89:18 | access to local variable p | semmle.label | access to local variable p | +| Tuples.cs:89:18:89:18 | access to local variable p | semmle.label | access to local variable p | +| Tuples.cs:90:18:90:18 | access to local variable r | semmle.label | access to local variable r | +| Tuples.cs:90:18:90:18 | access to local variable r | semmle.label | access to local variable r | +| Tuples.cs:99:17:99:33 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:99:17:99:33 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:100:17:100:28 | object creation of type R1 [property i] : String | semmle.label | object creation of type R1 [property i] : String | +| Tuples.cs:100:17:100:28 | object creation of type R1 [property i] : String | semmle.label | object creation of type R1 [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | semmle.label | access to local variable o : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | semmle.label | access to local variable o : String | +| Tuples.cs:101:14:101:14 | access to local variable r [property i] : String | semmle.label | access to local variable r [property i] : String | +| Tuples.cs:101:14:101:14 | access to local variable r [property i] : String | semmle.label | access to local variable r [property i] : String | +| Tuples.cs:101:14:101:16 | access to property i | semmle.label | access to property i | +| Tuples.cs:101:14:101:16 | access to property i | semmle.label | access to property i | +| Tuples.cs:118:17:118:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:118:17:118:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Tuples.cs:121:9:121:23 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:121:9:121:23 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | semmle.label | SSA def(x1) : Object | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | semmle.label | SSA def(x1) : Object | +| Tuples.cs:121:27:121:32 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:121:27:121:32 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:122:14:122:15 | access to local variable x1 | semmle.label | access to local variable x1 | +| Tuples.cs:122:14:122:15 | access to local variable x1 | semmle.label | access to local variable x1 | +| Tuples.cs:125:9:125:20 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:125:9:125:20 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | semmle.label | SSA def(x2) : Object | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | semmle.label | SSA def(x2) : Object | +| Tuples.cs:125:24:125:29 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:125:24:125:29 | (..., ...) [field Item1] : Object | semmle.label | (..., ...) [field Item1] : Object | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:126:14:126:15 | access to local variable x2 | semmle.label | access to local variable x2 | +| Tuples.cs:126:14:126:15 | access to local variable x2 | semmle.label | access to local variable x2 | +| Tuples.cs:129:9:129:23 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:129:9:129:23 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | semmle.label | SSA def(y3) : Object | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | semmle.label | SSA def(y3) : Object | +| Tuples.cs:129:27:129:32 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:129:27:129:32 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:130:14:130:15 | access to local variable y3 | semmle.label | access to local variable y3 | +| Tuples.cs:130:14:130:15 | access to local variable y3 | semmle.label | access to local variable y3 | +| Tuples.cs:133:9:133:20 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:133:9:133:20 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | semmle.label | SSA def(y4) : Object | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | semmle.label | SSA def(y4) : Object | +| Tuples.cs:133:24:133:29 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:133:24:133:29 | (..., ...) [field Item2] : Object | semmle.label | (..., ...) [field Item2] : Object | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Tuples.cs:134:14:134:15 | access to local variable y4 | semmle.label | access to local variable y4 | +| Tuples.cs:134:14:134:15 | access to local variable y4 | semmle.label | access to local variable y4 | subpaths #select -| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:9:14:9:14 | access to local variable a | $@ | Tuples.cs:9:14:9:14 | access to local variable a | access to local variable a | -| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:14:14:14:14 | access to local variable a | $@ | Tuples.cs:14:14:14:14 | access to local variable a | access to local variable a | -| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:19:14:19:14 | access to local variable p | $@ | Tuples.cs:19:14:19:14 | access to local variable p | access to local variable p | -| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:23:14:23:20 | access to field Item1 | $@ | Tuples.cs:23:14:23:20 | access to field Item1 | access to field Item1 | -| Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:7:21:7:34 | "taint source" : String | Tuples.cs:24:14:24:16 | access to field Item1 | $@ | Tuples.cs:24:14:24:16 | access to field Item1 | access to field Item1 | -| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:11:14:11:14 | access to local variable c | $@ | Tuples.cs:11:14:11:14 | access to local variable c | access to local variable c | -| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:16:14:16:14 | access to local variable c | $@ | Tuples.cs:16:14:16:14 | access to local variable c | access to local variable c | -| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:21:14:21:20 | access to field Item2 | $@ | Tuples.cs:21:14:21:20 | access to field Item2 | access to field Item2 | -| Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:7:41:7:54 | "taint source" : String | Tuples.cs:26:14:26:26 | access to field Item2 | $@ | Tuples.cs:26:14:26:26 | access to field Item2 | access to field Item2 | -| Tuples.cs:31:18:31:31 | "taint source" : String | Tuples.cs:31:18:31:31 | "taint source" : String | Tuples.cs:32:14:32:20 | access to field Item1 | $@ | Tuples.cs:32:14:32:20 | access to field Item1 | access to field Item1 | -| Tuples.cs:31:58:31:71 | "taint source" : String | Tuples.cs:31:58:31:71 | "taint source" : String | Tuples.cs:34:14:34:21 | access to field Item10 | $@ | Tuples.cs:34:14:34:21 | access to field Item10 | access to field Item10 | -| Tuples.cs:39:48:39:61 | "taint source" : String | Tuples.cs:39:48:39:61 | "taint source" : String | Tuples.cs:40:14:40:20 | access to field Item1 | $@ | Tuples.cs:40:14:40:20 | access to field Item1 | access to field Item1 | -| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:54:22:54:28 | access to field Item1 | $@ | Tuples.cs:54:22:54:28 | access to field Item1 | access to field Item1 | -| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:59:22:59:22 | access to local variable a | $@ | Tuples.cs:59:22:59:22 | access to local variable a | access to local variable a | -| Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:50:18:50:31 | "taint source" : String | Tuples.cs:79:18:79:18 | access to local variable p | $@ | Tuples.cs:79:18:79:18 | access to local variable p | access to local variable p | -| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:55:22:55:34 | access to field Item2 | $@ | Tuples.cs:55:22:55:34 | access to field Item2 | access to field Item2 | -| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:60:22:60:22 | access to local variable c | $@ | Tuples.cs:60:22:60:22 | access to local variable c | access to local variable c | -| Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:50:38:50:51 | "taint source" : String | Tuples.cs:80:18:80:18 | access to local variable r | $@ | Tuples.cs:80:18:80:18 | access to local variable r | access to local variable r | -| Tuples.cs:89:24:89:37 | "taint source" : String | Tuples.cs:89:24:89:37 | "taint source" : String | Tuples.cs:90:14:90:16 | access to property i | $@ | Tuples.cs:90:14:90:16 | access to property i | access to property i | +| Tuples.cs:12:14:12:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:12:14:12:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:14:14:14:14 | access to local variable c | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:14:14:14:14 | access to local variable c | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:17:14:17:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:17:14:17:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:19:14:19:14 | access to local variable c | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:19:14:19:14 | access to local variable c | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:22:14:22:14 | access to local variable p | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:22:14:22:14 | access to local variable p | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:24:14:24:20 | access to field Item2 | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:24:14:24:20 | access to field Item2 | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:26:14:26:20 | access to field Item1 | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:26:14:26:20 | access to field Item1 | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:27:14:27:16 | access to field Item1 | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:27:14:27:16 | access to field Item1 | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:29:14:29:26 | access to field Item2 | Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:29:14:29:26 | access to field Item2 | $@ | Tuples.cs:8:18:8:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:38:14:38:20 | access to field Item1 | Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:38:14:38:20 | access to field Item1 | $@ | Tuples.cs:34:18:34:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:40:14:40:21 | access to field Item10 | Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:40:14:40:21 | access to field Item10 | $@ | Tuples.cs:35:18:35:34 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:47:14:47:20 | access to field Item1 | Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:47:14:47:20 | access to field Item1 | $@ | Tuples.cs:45:17:45:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:63:22:63:28 | access to field Item1 | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:63:22:63:28 | access to field Item1 | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:64:22:64:34 | access to field Item2 | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:64:22:64:34 | access to field Item2 | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:68:22:68:22 | access to local variable a | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:68:22:68:22 | access to local variable a | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:69:22:69:22 | access to local variable c | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:69:22:69:22 | access to local variable c | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:89:18:89:18 | access to local variable p | Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:89:18:89:18 | access to local variable p | $@ | Tuples.cs:57:18:57:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:90:18:90:18 | access to local variable r | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:90:18:90:18 | access to local variable r | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | +| Tuples.cs:101:14:101:16 | access to property i | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:101:14:101:16 | access to property i | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:122:14:122:15 | access to local variable x1 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:126:14:126:15 | access to local variable x2 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:130:14:130:15 | access to local variable y3 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | +| Tuples.cs:134:14:134:15 | access to local variable y4 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql index 147cdfa13d0..55578cf970c 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.ql @@ -4,22 +4,8 @@ import csharp import DataFlow::PathGraph +import TestUtilities.InlineFlowTest -class Conf extends DataFlow::Configuration { - Conf() { this = "TuplesConf" } - - override predicate isSource(DataFlow::Node src) { - src.asExpr().(StringLiteral).getValue() = "taint source" - } - - override predicate isSink(DataFlow::Node sink) { - exists(MethodCall mc | - mc.getTarget().hasUndecoratedName("Sink") and - mc.getAnArgument() = sink.asExpr() - ) - } -} - -from DataFlow::PathNode source, DataFlow::PathNode sink, Conf conf +from DataFlow::PathNode source, DataFlow::PathNode sink, DefaultValueFlowConf conf where conf.hasFlowPath(source, sink) -select source, source, sink, "$@", sink, sink.toString() +select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/definitions/PrintAst.expected b/csharp/ql/test/library-tests/definitions/PrintAst.expected index 90c9e9cabdf..4f6de99bb1a 100644 --- a/csharp/ql/test/library-tests/definitions/PrintAst.expected +++ b/csharp/ql/test/library-tests/definitions/PrintAst.expected @@ -462,7 +462,7 @@ definitions.cs: # 181| 0: [Parameter] c # 181| -1: [TypeMention] C6 #-----| 0: (Attributes) -# 181| 1: [Attribute] [My(...)] +# 181| 1: [DefaultAttribute] [My(...)] # 181| 0: [TypeMention] MyAttribute # 182| 4: [BlockStmt] {...} # 183| 0: [ReturnStmt] return ...; diff --git a/csharp/ql/test/library-tests/dispatch/viableCallable.expected b/csharp/ql/test/library-tests/dispatch/viableCallable.expected index 95aa00747e4..74028980ba8 100644 --- a/csharp/ql/test/library-tests/dispatch/viableCallable.expected +++ b/csharp/ql/test/library-tests/dispatch/viableCallable.expected @@ -213,11 +213,20 @@ | ViableCallable.cs:174:19:174:25 | dynamic access to element | get_Item | C2<> | | ViableCallable.cs:174:19:174:25 | dynamic access to element | get_Item | C6<,> | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Decimal | +| 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 + | + | 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 - | - | 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 + | + | 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 | | ViableCallable.cs:189:9:189:143 | call to method InvokeMember | get_Prop3 | C10 | diff --git a/csharp/ql/test/query-tests/Nullness/E.cs b/csharp/ql/test/query-tests/Nullness/E.cs index 02faafcbdbb..86de6442fdf 100644 --- a/csharp/ql/test/query-tests/Nullness/E.cs +++ b/csharp/ql/test/query-tests/Nullness/E.cs @@ -9,9 +9,9 @@ public class E long[][] a2 = null; var haveA2 = ix < len && (a2 = a1[ix]) != null; long[] a3 = null; - var haveA3 = haveA2 && (a3 = a2[ix]) != null; // GOOD (false positive) + var haveA3 = haveA2 && (a3 = a2[ix]) != null; // GOOD (FALSE POSITIVE) if (haveA3) - a3[0] = 0; // GOOD (false positive) + a3[0] = 0; // GOOD (FALSE POSITIVE) } public void Ex2(bool x, bool y) @@ -24,7 +24,7 @@ public class E s2 = (s1 == null) ? null : ""; } if (s2 != null) - s1.ToString(); // GOOD (false positive) + s1.ToString(); // GOOD (FALSE POSITIVE) } public void Ex3(IEnumerable ss) @@ -58,7 +58,7 @@ public class E slice = new List(); result.Add(slice); } - slice.Add(str); // GOOD (false positive) + slice.Add(str); // GOOD (FALSE POSITIVE) ++index; } } @@ -70,7 +70,7 @@ public class E arrLen = arr == null ? 0 : arr.Length; if (arrLen > 0) - arr[0] = 0; // GOOD (false positive) + arr[0] = 0; // GOOD (FALSE POSITIVE) } public const int MY_CONST_A = 1; @@ -109,7 +109,7 @@ public class E arr2 = new int[arr1.Length]; for (var i = 0; i < arr1.Length; i++) - arr2[i] = arr1[i]; // GOOD (false positive) + arr2[i] = arr1[i]; // GOOD (FALSE POSITIVE) } public void Ex8(int x, int lim) @@ -122,7 +122,7 @@ public class E int j = 0; while (!stop && j < lim) { - int step = (j * obj.GetHashCode()) % 10; // GOOD (false positive) + int step = (j * obj.GetHashCode()) % 10; // GOOD (FALSE POSITIVE) if (step == 0) { obj.ToString(); // GOOD @@ -156,7 +156,7 @@ public class E cond = true; } if (cond) - obj2.ToString(); // GOOD (false positive) + obj2.ToString(); // GOOD (FALSE POSITIVE) } public void Ex10(int[] a) @@ -164,7 +164,7 @@ public class E int n = a == null ? 0 : a.Length; for (var i = 0; i < n; i++) { - int x = a[i]; // GOOD (false positive) + int x = a[i]; // GOOD (FALSE POSITIVE) if (x > 7) a = new int[n]; } @@ -175,7 +175,7 @@ public class E bool b2 = obj == null ? false : b1; if (b2 == null) { - obj.ToString(); // GOOD (false positive) + obj.ToString(); // GOOD (FALSE POSITIVE) } if (obj == null) { @@ -183,7 +183,7 @@ public class E } if (b1 == null) { - obj.ToString(); // GOOD (false positive) + obj.ToString(); // GOOD (FALSE POSITIVE) } } @@ -372,7 +372,7 @@ public class E if (o is string) { var s = o as string; - return s.Length; // GOOD (false positive) + return s.Length; // GOOD (FALSE POSITIVE) } return -1; } @@ -383,7 +383,7 @@ public class E return false; if (e1 == null && e2 == null) return true; - return e1.Long == e2.Long; // GOOD (false positive) + return e1.Long == e2.Long; // GOOD (FALSE POSITIVE) } int Ex38(int? i) @@ -411,6 +411,26 @@ public class E i ??= null; return i.Value; // GOOD } + + static bool Ex42(int? i, IEnumerable @is) + { + return @is.Any(j => j == i.Value); // BAD (maybe) + } + + static bool Ex43(int? i, IEnumerable @is) + { + if (i.HasValue) + return @is.Any(j => j == i.Value); // GOOD + return false; + } + + static bool Ex44(int? i, IEnumerable @is) + { + if (i.HasValue) + @is = @is.Where(j => j == i.Value); // BAD (always) (FALSE NEGATIVE) + i = null; + return @is.Any(); + } } public static class Extensions diff --git a/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected b/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected index e4390f866e5..723f4c34b76 100644 --- a/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected +++ b/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected @@ -238,6 +238,12 @@ | E.cs:384:27:384:36 | ... == ... | true | E.cs:384:33:384:36 | null | E.cs:384:27:384:28 | access to parameter e2 | | E.cs:386:16:386:33 | ... == ... | true | E.cs:386:16:386:22 | access to property Long | E.cs:386:27:386:33 | access to property Long | | E.cs:386:16:386:33 | ... == ... | true | E.cs:386:27:386:33 | access to property Long | E.cs:386:16:386:22 | access to property Long | +| E.cs:417:29:417:40 | ... == ... | true | E.cs:417:29:417:29 | access to parameter j | E.cs:417:34:417:40 | access to property Value | +| E.cs:417:29:417:40 | ... == ... | true | E.cs:417:34:417:40 | access to property Value | E.cs:417:29:417:29 | access to parameter j | +| E.cs:423:33:423:44 | ... == ... | true | E.cs:423:33:423:33 | access to parameter j | E.cs:423:38:423:44 | access to property Value | +| E.cs:423:33:423:44 | ... == ... | true | E.cs:423:38:423:44 | access to property Value | E.cs:423:33:423:33 | access to parameter j | +| E.cs:430:34:430:45 | ... == ... | true | E.cs:430:34:430:34 | access to parameter j | E.cs:430:39:430:45 | access to property Value | +| E.cs:430:34:430:45 | ... == ... | true | E.cs:430:39:430:45 | access to property Value | E.cs:430:34:430:34 | access to parameter j | | Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:13:59:13 | access to parameter o | Forwarding.cs:59:18:59:21 | null | | Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:18:59:21 | null | Forwarding.cs:59:13:59:13 | access to parameter o | | Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:32:78:32 | access to parameter o | Forwarding.cs:78:35:78:38 | null | diff --git a/csharp/ql/test/query-tests/Nullness/Implications.expected b/csharp/ql/test/query-tests/Nullness/Implications.expected index 4e8dbe93079..18c3d8d33d7 100644 --- a/csharp/ql/test/query-tests/Nullness/Implications.expected +++ b/csharp/ql/test/query-tests/Nullness/Implications.expected @@ -1292,6 +1292,14 @@ | E.cs:411:9:411:18 | ... ?? ... | null | E.cs:411:15:411:18 | null | null | | E.cs:412:16:412:16 | access to local variable i | non-null | E.cs:411:9:411:18 | ... ?? ... | non-null | | E.cs:412:16:412:16 | access to local variable i | null | E.cs:411:9:411:18 | ... ?? ... | null | +| E.cs:417:16:417:41 | call to method Any | true | E.cs:417:16:417:18 | access to parameter is | non-empty | +| E.cs:422:13:422:22 | access to property HasValue | false | E.cs:422:13:422:13 | access to parameter i | null | +| E.cs:422:13:422:22 | access to property HasValue | true | E.cs:422:13:422:13 | access to parameter i | non-null | +| E.cs:423:20:423:45 | call to method Any | true | E.cs:423:20:423:22 | access to parameter is | non-empty | +| E.cs:429:13:429:22 | access to property HasValue | false | E.cs:429:13:429:13 | access to parameter i | null | +| E.cs:429:13:429:22 | access to property HasValue | true | E.cs:429:13:429:13 | access to parameter i | non-null | +| E.cs:432:16:432:24 | call to method Any | false | E.cs:432:16:432:18 | access to parameter is | empty | +| E.cs:432:16:432:24 | call to method Any | true | E.cs:432:16:432:18 | access to parameter is | non-empty | | Forwarding.cs:9:13:9:30 | !... | false | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | true | | Forwarding.cs:9:13:9:30 | !... | true | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | false | | Forwarding.cs:9:14:9:14 | access to local variable s | empty | Forwarding.cs:7:20:7:23 | null | empty | diff --git a/csharp/ql/test/query-tests/Nullness/NullCheck.expected b/csharp/ql/test/query-tests/Nullness/NullCheck.expected index 9557aff163d..cea746c2ed2 100644 --- a/csharp/ql/test/query-tests/Nullness/NullCheck.expected +++ b/csharp/ql/test/query-tests/Nullness/NullCheck.expected @@ -294,6 +294,10 @@ | E.cs:404:9:404:9 | access to local variable i | E.cs:404:9:404:9 | access to local variable i | null | true | | E.cs:411:9:411:9 | access to local variable i | E.cs:411:9:411:9 | access to local variable i | non-null | false | | E.cs:411:9:411:9 | access to local variable i | E.cs:411:9:411:9 | access to local variable i | null | true | +| E.cs:422:13:422:22 | access to property HasValue | E.cs:422:13:422:13 | access to parameter i | false | true | +| E.cs:422:13:422:22 | access to property HasValue | E.cs:422:13:422:13 | access to parameter i | true | false | +| E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | false | true | +| E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | true | false | | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | Forwarding.cs:9:14:9:14 | access to local variable s | false | false | | Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | Forwarding.cs:14:13:14:13 | access to local variable s | true | false | | Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | false | false | diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 0e454055f40..39bc2d17684 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -406,6 +406,8 @@ nodes | E.cs:404:9:404:18 | SSA def(i) | | E.cs:404:9:404:18 | SSA def(i) | | E.cs:405:16:405:16 | access to local variable i | +| E.cs:417:24:417:40 | SSA capture def(i) | +| E.cs:417:34:417:34 | access to parameter i | | Forwarding.cs:7:16:7:23 | SSA def(s) | | Forwarding.cs:9:13:9:30 | [false] !... | | Forwarding.cs:14:9:17:9 | if (...) ... | @@ -795,6 +797,7 @@ edges | E.cs:384:27:384:28 | access to parameter e2 | E.cs:384:13:384:36 | [false] ... && ... | | E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | | E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | +| E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | | Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... | | Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... | | Forwarding.cs:14:9:17:9 | if (...) ... | Forwarding.cs:19:9:22:9 | if (...) ... | @@ -907,6 +910,7 @@ edges | E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null here as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:28:382:37 | ... != ... | this | | E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null here as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:58:382:67 | ... == ... | this | | E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null here as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:384:27:384:36 | ... == ... | this | +| E.cs:417:34:417:34 | access to parameter i | E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null here because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | | GuardedString.cs:35:31:35:31 | access to local variable s | GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null here because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this | | NullMaybeBad.cs:7:27:7:27 | access to parameter o | NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null here because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this | | StringConcatenation.cs:16:17:16:17 | access to local variable s | StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:16:17:16:17 | access to local variable s | Variable $@ may be null here because of $@ assignment. | StringConcatenation.cs:14:16:14:16 | s | s | StringConcatenation.cs:14:16:14:23 | String s = ... | this | diff --git a/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected b/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected index 55cd11fe503..3cda5170cb0 100644 --- a/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected +++ b/csharp/ql/test/query-tests/Stubs/Minimal/MinimalStubsFromSource.expected @@ -1 +1 @@ -| // This file contains auto-generated code.\n\nnamespace System\n{\n// Generated from `System.Uri` in `System.Private.Uri, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Uri : System.Runtime.Serialization.ISerializable\n{\n public override bool Equals(object comparand) => throw null;\n public override int GetHashCode() => throw null;\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext streamingContext) => throw null;\n public override string ToString() => throw null;\n}\n\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Collections\n{\n// Generated from `System.Collections.SortedList` in `System.Collections.NonGeneric, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class SortedList : System.Collections.ICollection, System.Collections.IDictionary, System.Collections.IEnumerable, System.ICloneable\n{\n public virtual void Add(object key, object value) => throw null;\n public virtual void Clear() => throw null;\n public virtual object Clone() => throw null;\n public virtual bool Contains(object key) => throw null;\n public virtual void CopyTo(System.Array array, int arrayIndex) => throw null;\n public virtual int Count { get => throw null; }\n public virtual object GetByIndex(int index) => throw null;\n public virtual System.Collections.IDictionaryEnumerator GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n public virtual bool IsFixedSize { get => throw null; }\n public virtual bool IsReadOnly { get => throw null; }\n public virtual bool IsSynchronized { get => throw null; }\n public virtual object this[object key] { get => throw null; set => throw null; }\n public virtual System.Collections.ICollection Keys { get => throw null; }\n public virtual void Remove(object key) => throw null;\n public virtual object SyncRoot { get => throw null; }\n public virtual System.Collections.ICollection Values { get => throw null; }\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Generic\n{\n// Generated from `System.Collections.Generic.Stack<>` in `System.Collections, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Stack : System.Collections.Generic.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.ICollection, System.Collections.IEnumerable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int arrayIndex) => throw null;\n public int Count { get => throw null; }\n System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public T Peek() => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Specialized\n{\n// Generated from `System.Collections.Specialized.NameObjectCollectionBase` in `System.Collections.Specialized, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic abstract class NameObjectCollectionBase : System.Collections.ICollection, System.Collections.IEnumerable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null;\n public virtual int Count { get => throw null; }\n public virtual System.Collections.IEnumerator GetEnumerator() => throw null;\n public virtual void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public virtual void OnDeserialization(object sender) => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\n// Generated from `System.Collections.Specialized.NameValueCollection` in `System.Collections.Specialized, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n public string this[string name] { get => throw null; set => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace ComponentModel\n{\n// Generated from `System.ComponentModel.ComponentConverter` in `System.ComponentModel.TypeConverter, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ComponentConverter : System.ComponentModel.ReferenceConverter\n{\n}\n\n// Generated from `System.ComponentModel.DefaultEventAttribute` in `System.ComponentModel.TypeConverter, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DefaultEventAttribute : System.Attribute\n{\n public DefaultEventAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\n// Generated from `System.ComponentModel.DefaultPropertyAttribute` in `System.ComponentModel.TypeConverter, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DefaultPropertyAttribute : System.Attribute\n{\n public DefaultPropertyAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\n// Generated from `System.ComponentModel.ReferenceConverter` in `System.ComponentModel.TypeConverter, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ReferenceConverter : System.ComponentModel.TypeConverter\n{\n}\n\n// Generated from `System.ComponentModel.TypeConverter` in `System.ComponentModel.TypeConverter, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TypeConverter\n{\n}\n\n}\nnamespace Timers\n{\n// Generated from `System.Timers.TimersDescriptionAttribute` in `System.ComponentModel.TypeConverter, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TimersDescriptionAttribute\n{\n public TimersDescriptionAttribute(string description) => throw null;\n internal TimersDescriptionAttribute(string description, string defaultValue) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace ComponentModel\n{\n// Generated from `System.ComponentModel.TypeConverterAttribute` in `System.ObjectModel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TypeConverterAttribute : System.Attribute\n{\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n public TypeConverterAttribute() => throw null;\n public TypeConverterAttribute(System.Type type) => throw null;\n public TypeConverterAttribute(string typeName) => throw null;\n}\n\n// Generated from `System.ComponentModel.TypeDescriptionProviderAttribute` in `System.ObjectModel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TypeDescriptionProviderAttribute : System.Attribute\n{\n public TypeDescriptionProviderAttribute(System.Type type) => throw null;\n public TypeDescriptionProviderAttribute(string typeName) => throw null;\n}\n\n}\nnamespace Windows\n{\nnamespace Markup\n{\n// Generated from `System.Windows.Markup.ValueSerializerAttribute` in `System.ObjectModel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ValueSerializerAttribute : System.Attribute\n{\n public ValueSerializerAttribute(System.Type valueSerializerType) => throw null;\n public ValueSerializerAttribute(string valueSerializerTypeName) => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.Enumerable` in `System.Linq, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic static class Enumerable\n{\n public static System.Collections.Generic.IEnumerable Select(this System.Collections.Generic.IEnumerable source, System.Func selector) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.IQueryable` in `System.Linq.Expressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic interface IQueryable : System.Collections.IEnumerable\n{\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.ParallelEnumerable` in `System.Linq.Parallel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic static class ParallelEnumerable\n{\n public static System.Linq.ParallelQuery AsParallel(this System.Collections.IEnumerable source) => throw null;\n}\n\n// Generated from `System.Linq.ParallelQuery` in `System.Linq.Parallel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ParallelQuery : System.Collections.IEnumerable\n{\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n internal ParallelQuery(System.Linq.Parallel.QuerySettings specifiedSettings) => throw null;\n}\n\nnamespace Parallel\n{\n// Generated from `System.Linq.Parallel.QuerySettings` in `System.Linq.Parallel, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\ninternal struct QuerySettings\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.Queryable` in `System.Linq.Queryable, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic static class Queryable\n{\n public static System.Linq.IQueryable AsQueryable(this System.Collections.IEnumerable source) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Runtime\n{\nnamespace Serialization\n{\n// Generated from `System.Runtime.Serialization.DataContractAttribute` in `System.Runtime.Serialization.Primitives, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DataContractAttribute : System.Attribute\n{\n public DataContractAttribute() => throw null;\n}\n\n// Generated from `System.Runtime.Serialization.DataMemberAttribute` in `System.Runtime.Serialization.Primitives, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DataMemberAttribute : System.Attribute\n{\n public DataMemberAttribute() => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Text\n{\nnamespace RegularExpressions\n{\n// Generated from `System.Text.RegularExpressions.Capture` in `System.Text.RegularExpressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Capture\n{\n internal Capture(string text, int index, int length) => throw null;\n public override string ToString() => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.Group` in `System.Text.RegularExpressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Group : System.Text.RegularExpressions.Capture\n{\n internal Group(string text, int[] caps, int capcount, string name) : base(default(string), default(int), default(int)) => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.Match` in `System.Text.RegularExpressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Match : System.Text.RegularExpressions.Group\n{\n internal Match(System.Text.RegularExpressions.Regex regex, int capcount, string text, int begpos, int len, int startpos) : base(default(string), default(int[]), default(int), default(string)) => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.Regex` in `System.Text.RegularExpressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Regex : System.Runtime.Serialization.ISerializable\n{\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null;\n public System.Text.RegularExpressions.Match Match(string input) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public Regex(string pattern) => throw null;\n public Regex(string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public string Replace(string input, string replacement) => throw null;\n public override string ToString() => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.RegexOptions` in `System.Text.RegularExpressions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\n[System.Flags]\npublic enum RegexOptions\n{\n IgnoreCase,\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Web\n{\n// Generated from `System.Web.HtmlString` in `../../../resources/stubs/System.Web.cs:34:18:34:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HtmlString : System.Web.IHtmlString\n{\n}\n\n// Generated from `System.Web.HttpContextBase` in `../../../resources/stubs/System.Web.cs:24:18:24:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpContextBase\n{\n public virtual System.Web.HttpRequestBase Request { get => throw null; }\n}\n\n// Generated from `System.Web.HttpCookie` in `../../../resources/stubs/System.Web.cs:173:18:173:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpCookie\n{\n}\n\n// Generated from `System.Web.HttpCookieCollection` in `../../../resources/stubs/System.Web.cs:191:27:191:46; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic abstract class HttpCookieCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n}\n\n// Generated from `System.Web.HttpRequest` in `../../../resources/stubs/System.Web.cs:145:18:145:28; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpRequest\n{\n}\n\n// Generated from `System.Web.HttpRequestBase` in `../../../resources/stubs/System.Web.cs:10:18:10:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpRequestBase\n{\n public virtual System.Collections.Specialized.NameValueCollection QueryString { get => throw null; }\n}\n\n// Generated from `System.Web.HttpResponse` in `../../../resources/stubs/System.Web.cs:156:18:156:29; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpResponse\n{\n}\n\n// Generated from `System.Web.HttpResponseBase` in `../../../resources/stubs/System.Web.cs:19:18:19:33; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpResponseBase\n{\n}\n\n// Generated from `System.Web.HttpServerUtility` in `../../../resources/stubs/System.Web.cs:41:18:41:34; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpServerUtility\n{\n}\n\n// Generated from `System.Web.IHtmlString` in `../../../resources/stubs/System.Web.cs:30:22:30:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IHtmlString\n{\n}\n\n// Generated from `System.Web.IHttpHandler` in `../../../resources/stubs/System.Web.cs:132:22:132:33; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IHttpHandler\n{\n}\n\n// Generated from `System.Web.IServiceProvider` in `../../../resources/stubs/System.Web.cs:136:22:136:37; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IServiceProvider\n{\n}\n\n// Generated from `System.Web.UnvalidatedRequestValues` in `../../../resources/stubs/System.Web.cs:140:18:140:41; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class UnvalidatedRequestValues\n{\n}\n\n// Generated from `System.Web.UnvalidatedRequestValuesBase` in `../../../resources/stubs/System.Web.cs:5:18:5:45; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class UnvalidatedRequestValuesBase\n{\n}\n\nnamespace Mvc\n{\n// Generated from `System.Web.Mvc.ActionMethodSelectorAttribute` in `../../../resources/stubs/System.Web.cs:240:18:240:46; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ActionMethodSelectorAttribute : System.Attribute\n{\n}\n\n// Generated from `System.Web.Mvc.ActionResult` in `../../../resources/stubs/System.Web.cs:232:18:232:29; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ActionResult\n{\n}\n\n// Generated from `System.Web.Mvc.ControllerContext` in `../../../resources/stubs/System.Web.cs:210:18:210:34; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ControllerContext\n{\n}\n\n// Generated from `System.Web.Mvc.FilterAttribute` in `../../../resources/stubs/System.Web.cs:236:18:236:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class FilterAttribute : System.Attribute\n{\n}\n\n// Generated from `System.Web.Mvc.GlobalFilterCollection` in `../../../resources/stubs/System.Web.cs:280:18:280:39; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class GlobalFilterCollection\n{\n}\n\n// Generated from `System.Web.Mvc.IFilterProvider` in `../../../resources/stubs/System.Web.cs:276:15:276:29; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\ninternal interface IFilterProvider\n{\n}\n\n// Generated from `System.Web.Mvc.IViewDataContainer` in `../../../resources/stubs/System.Web.cs:218:22:218:39; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IViewDataContainer\n{\n}\n\n// Generated from `System.Web.Mvc.ViewContext` in `../../../resources/stubs/System.Web.cs:214:18:214:28; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ViewContext : System.Web.Mvc.ControllerContext\n{\n}\n\n// Generated from `System.Web.Mvc.ViewResult` in `../../../resources/stubs/System.Web.cs:272:18:272:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ViewResult : System.Web.Mvc.ViewResultBase\n{\n}\n\n// Generated from `System.Web.Mvc.ViewResultBase` in `../../../resources/stubs/System.Web.cs:268:18:268:31; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ViewResultBase : System.Web.Mvc.ActionResult\n{\n}\n\n}\nnamespace Routing\n{\n// Generated from `System.Web.Routing.RequestContext` in `../../../resources/stubs/System.Web.cs:299:18:299:31; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class RequestContext\n{\n}\n\n}\nnamespace Script\n{\nnamespace Serialization\n{\n// Generated from `System.Web.Script.Serialization.JavaScriptTypeResolver` in `../../../resources/stubs/System.Web.cs:364:27:364:48; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic abstract class JavaScriptTypeResolver\n{\n}\n\n}\n}\nnamespace Security\n{\n// Generated from `System.Web.Security.MembershipUser` in `../../../resources/stubs/System.Web.cs:322:18:322:31; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class MembershipUser\n{\n}\n\n}\nnamespace SessionState\n{\n// Generated from `System.Web.SessionState.HttpSessionState` in `../../../resources/stubs/System.Web.cs:200:18:200:33; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpSessionState\n{\n}\n\n}\nnamespace UI\n{\n// Generated from `System.Web.UI.Control` in `../../../resources/stubs/System.Web.cs:76:18:76:24; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class Control\n{\n}\n\nnamespace WebControls\n{\n// Generated from `System.Web.UI.WebControls.WebControl` in `../../../resources/stubs/System.Web.cs:104:18:104:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class WebControl : System.Web.UI.Control\n{\n}\n\n}\n}\n}\n}\n\n\n | +| // This file contains auto-generated code.\n\nnamespace System\n{\n// Generated from `System.Uri` in `System.Private.Uri, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Uri : System.Runtime.Serialization.ISerializable\n{\n public override bool Equals(object comparand) => throw null;\n public override int GetHashCode() => throw null;\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext streamingContext) => throw null;\n public override string ToString() => throw null;\n}\n\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Collections\n{\n// Generated from `System.Collections.SortedList` in `System.Collections.NonGeneric, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class SortedList : System.Collections.ICollection, System.Collections.IDictionary, System.Collections.IEnumerable, System.ICloneable\n{\n public virtual void Add(object key, object value) => throw null;\n public virtual void Clear() => throw null;\n public virtual object Clone() => throw null;\n public virtual bool Contains(object key) => throw null;\n public virtual void CopyTo(System.Array array, int arrayIndex) => throw null;\n public virtual int Count { get => throw null; }\n public virtual object GetByIndex(int index) => throw null;\n public virtual System.Collections.IDictionaryEnumerator GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n public virtual bool IsFixedSize { get => throw null; }\n public virtual bool IsReadOnly { get => throw null; }\n public virtual bool IsSynchronized { get => throw null; }\n public virtual object this[object key] { get => throw null; set => throw null; }\n public virtual System.Collections.ICollection Keys { get => throw null; }\n public virtual void Remove(object key) => throw null;\n public virtual object SyncRoot { get => throw null; }\n public virtual System.Collections.ICollection Values { get => throw null; }\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Generic\n{\n// Generated from `System.Collections.Generic.Stack<>` in `System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Stack : System.Collections.Generic.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.ICollection, System.Collections.IEnumerable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int arrayIndex) => throw null;\n public int Count { get => throw null; }\n System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() => throw null;\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public T Peek() => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Collections\n{\nnamespace Specialized\n{\n// Generated from `System.Collections.Specialized.NameObjectCollectionBase` in `System.Collections.Specialized, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic abstract class NameObjectCollectionBase : System.Collections.ICollection, System.Collections.IEnumerable, System.Runtime.Serialization.IDeserializationCallback, System.Runtime.Serialization.ISerializable\n{\n void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null;\n public virtual int Count { get => throw null; }\n public virtual System.Collections.IEnumerator GetEnumerator() => throw null;\n public virtual void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null;\n bool System.Collections.ICollection.IsSynchronized { get => throw null; }\n public virtual void OnDeserialization(object sender) => throw null;\n object System.Collections.ICollection.SyncRoot { get => throw null; }\n}\n\n// Generated from `System.Collections.Specialized.NameValueCollection` in `System.Collections.Specialized, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class NameValueCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n public string this[string name] { get => throw null; set => throw null; }\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace ComponentModel\n{\n// Generated from `System.ComponentModel.ComponentConverter` in `System.ComponentModel.TypeConverter, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ComponentConverter : System.ComponentModel.ReferenceConverter\n{\n}\n\n// Generated from `System.ComponentModel.DefaultEventAttribute` in `System.ComponentModel.TypeConverter, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DefaultEventAttribute : System.Attribute\n{\n public DefaultEventAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\n// Generated from `System.ComponentModel.DefaultPropertyAttribute` in `System.ComponentModel.TypeConverter, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DefaultPropertyAttribute : System.Attribute\n{\n public DefaultPropertyAttribute(string name) => throw null;\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n}\n\n// Generated from `System.ComponentModel.ReferenceConverter` in `System.ComponentModel.TypeConverter, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ReferenceConverter : System.ComponentModel.TypeConverter\n{\n}\n\n// Generated from `System.ComponentModel.TypeConverter` in `System.ComponentModel.TypeConverter, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TypeConverter\n{\n}\n\n}\nnamespace Timers\n{\n// Generated from `System.Timers.TimersDescriptionAttribute` in `System.ComponentModel.TypeConverter, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TimersDescriptionAttribute\n{\n public TimersDescriptionAttribute(string description) => throw null;\n internal TimersDescriptionAttribute(string description, string unused) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace ComponentModel\n{\n// Generated from `System.ComponentModel.TypeConverterAttribute` in `System.ObjectModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TypeConverterAttribute : System.Attribute\n{\n public override bool Equals(object obj) => throw null;\n public override int GetHashCode() => throw null;\n public TypeConverterAttribute() => throw null;\n public TypeConverterAttribute(System.Type type) => throw null;\n public TypeConverterAttribute(string typeName) => throw null;\n}\n\n// Generated from `System.ComponentModel.TypeDescriptionProviderAttribute` in `System.ObjectModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class TypeDescriptionProviderAttribute : System.Attribute\n{\n public TypeDescriptionProviderAttribute(System.Type type) => throw null;\n public TypeDescriptionProviderAttribute(string typeName) => throw null;\n}\n\n}\nnamespace Windows\n{\nnamespace Markup\n{\n// Generated from `System.Windows.Markup.ValueSerializerAttribute` in `System.ObjectModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ValueSerializerAttribute : System.Attribute\n{\n public ValueSerializerAttribute(System.Type valueSerializerType) => throw null;\n public ValueSerializerAttribute(string valueSerializerTypeName) => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.Enumerable` in `System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic static class Enumerable\n{\n public static System.Collections.Generic.IEnumerable Select(this System.Collections.Generic.IEnumerable source, System.Func selector) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.IQueryable` in `System.Linq.Expressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic interface IQueryable : System.Collections.IEnumerable\n{\n}\n\n}\nnamespace Runtime\n{\nnamespace CompilerServices\n{\n// Generated from `System.Runtime.CompilerServices.CallSite` in `System.Linq.Expressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class CallSite\n{\n internal CallSite(System.Runtime.CompilerServices.CallSiteBinder binder) => throw null;\n}\n\n// Generated from `System.Runtime.CompilerServices.CallSite<>` in `System.Linq.Expressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class CallSite : System.Runtime.CompilerServices.CallSite where T: class\n{\n private CallSite() : base(default(System.Runtime.CompilerServices.CallSiteBinder)) => throw null;\n private CallSite(System.Runtime.CompilerServices.CallSiteBinder binder) : base(default(System.Runtime.CompilerServices.CallSiteBinder)) => throw null;\n}\n\n// Generated from `System.Runtime.CompilerServices.CallSiteBinder` in `System.Linq.Expressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic abstract class CallSiteBinder\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.ParallelEnumerable` in `System.Linq.Parallel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic static class ParallelEnumerable\n{\n public static System.Linq.ParallelQuery AsParallel(this System.Collections.IEnumerable source) => throw null;\n}\n\n// Generated from `System.Linq.ParallelQuery` in `System.Linq.Parallel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class ParallelQuery : System.Collections.IEnumerable\n{\n System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null;\n internal ParallelQuery(System.Linq.Parallel.QuerySettings specifiedSettings) => throw null;\n}\n\nnamespace Parallel\n{\n// Generated from `System.Linq.Parallel.QuerySettings` in `System.Linq.Parallel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\ninternal struct QuerySettings\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Linq\n{\n// Generated from `System.Linq.Queryable` in `System.Linq.Queryable, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic static class Queryable\n{\n public static System.Linq.IQueryable AsQueryable(this System.Collections.IEnumerable source) => throw null;\n}\n\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Runtime\n{\nnamespace Serialization\n{\n// Generated from `System.Runtime.Serialization.DataContractAttribute` in `System.Runtime.Serialization.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DataContractAttribute : System.Attribute\n{\n public DataContractAttribute() => throw null;\n}\n\n// Generated from `System.Runtime.Serialization.DataMemberAttribute` in `System.Runtime.Serialization.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class DataMemberAttribute : System.Attribute\n{\n public DataMemberAttribute() => throw null;\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Security\n{\nnamespace Cryptography\n{\n// Generated from `System.Security.Cryptography.PaddingMode` in `System.Security.Cryptography.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic enum PaddingMode\n{\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Text\n{\nnamespace RegularExpressions\n{\n// Generated from `System.Text.RegularExpressions.Capture` in `System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Capture\n{\n internal Capture(string text, int index, int length) => throw null;\n public override string ToString() => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.Group` in `System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Group : System.Text.RegularExpressions.Capture\n{\n internal Group(string text, int[] caps, int capcount, string name) : base(default(string), default(int), default(int)) => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.Match` in `System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Match : System.Text.RegularExpressions.Group\n{\n internal Match(System.Text.RegularExpressions.Regex regex, int capcount, string text, int begpos, int len, int startpos) : base(default(string), default(int[]), default(int), default(string)) => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.Regex` in `System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\npublic class Regex : System.Runtime.Serialization.ISerializable\n{\n void System.Runtime.Serialization.ISerializable.GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null;\n public System.Text.RegularExpressions.Match Match(string input) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern) => throw null;\n public static System.Text.RegularExpressions.Match Match(string input, string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public Regex(string pattern) => throw null;\n public Regex(string pattern, System.Text.RegularExpressions.RegexOptions options, System.TimeSpan matchTimeout) => throw null;\n public string Replace(string input, string replacement) => throw null;\n public override string ToString() => throw null;\n}\n\n// Generated from `System.Text.RegularExpressions.RegexOptions` in `System.Text.RegularExpressions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`\n[System.Flags]\npublic enum RegexOptions\n{\n IgnoreCase,\n}\n\n}\n}\n}\n\n\n// This file contains auto-generated code.\n\nnamespace System\n{\nnamespace Web\n{\n// Generated from `System.Web.HtmlString` in `../../../resources/stubs/System.Web.cs:34:18:34:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HtmlString : System.Web.IHtmlString\n{\n}\n\n// Generated from `System.Web.HttpContextBase` in `../../../resources/stubs/System.Web.cs:24:18:24:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpContextBase\n{\n public virtual System.Web.HttpRequestBase Request { get => throw null; }\n}\n\n// Generated from `System.Web.HttpCookie` in `../../../resources/stubs/System.Web.cs:173:18:173:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpCookie\n{\n}\n\n// Generated from `System.Web.HttpCookieCollection` in `../../../resources/stubs/System.Web.cs:191:27:191:46; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic abstract class HttpCookieCollection : System.Collections.Specialized.NameObjectCollectionBase\n{\n}\n\n// Generated from `System.Web.HttpRequest` in `../../../resources/stubs/System.Web.cs:145:18:145:28; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpRequest\n{\n}\n\n// Generated from `System.Web.HttpRequestBase` in `../../../resources/stubs/System.Web.cs:10:18:10:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpRequestBase\n{\n public virtual System.Collections.Specialized.NameValueCollection QueryString { get => throw null; }\n}\n\n// Generated from `System.Web.HttpResponse` in `../../../resources/stubs/System.Web.cs:156:18:156:29; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpResponse\n{\n}\n\n// Generated from `System.Web.HttpResponseBase` in `../../../resources/stubs/System.Web.cs:19:18:19:33; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpResponseBase\n{\n}\n\n// Generated from `System.Web.HttpServerUtility` in `../../../resources/stubs/System.Web.cs:41:18:41:34; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpServerUtility\n{\n}\n\n// Generated from `System.Web.IHtmlString` in `../../../resources/stubs/System.Web.cs:30:22:30:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IHtmlString\n{\n}\n\n// Generated from `System.Web.IHttpHandler` in `../../../resources/stubs/System.Web.cs:132:22:132:33; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IHttpHandler\n{\n}\n\n// Generated from `System.Web.IServiceProvider` in `../../../resources/stubs/System.Web.cs:136:22:136:37; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IServiceProvider\n{\n}\n\n// Generated from `System.Web.UnvalidatedRequestValues` in `../../../resources/stubs/System.Web.cs:140:18:140:41; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class UnvalidatedRequestValues\n{\n}\n\n// Generated from `System.Web.UnvalidatedRequestValuesBase` in `../../../resources/stubs/System.Web.cs:5:18:5:45; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class UnvalidatedRequestValuesBase\n{\n}\n\nnamespace Mvc\n{\n// Generated from `System.Web.Mvc.ActionMethodSelectorAttribute` in `../../../resources/stubs/System.Web.cs:240:18:240:46; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ActionMethodSelectorAttribute : System.Attribute\n{\n}\n\n// Generated from `System.Web.Mvc.ActionResult` in `../../../resources/stubs/System.Web.cs:232:18:232:29; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ActionResult\n{\n}\n\n// Generated from `System.Web.Mvc.ControllerContext` in `../../../resources/stubs/System.Web.cs:210:18:210:34; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ControllerContext\n{\n}\n\n// Generated from `System.Web.Mvc.FilterAttribute` in `../../../resources/stubs/System.Web.cs:236:18:236:32; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class FilterAttribute : System.Attribute\n{\n}\n\n// Generated from `System.Web.Mvc.GlobalFilterCollection` in `../../../resources/stubs/System.Web.cs:280:18:280:39; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class GlobalFilterCollection\n{\n}\n\n// Generated from `System.Web.Mvc.IFilterProvider` in `../../../resources/stubs/System.Web.cs:276:15:276:29; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\ninternal interface IFilterProvider\n{\n}\n\n// Generated from `System.Web.Mvc.IViewDataContainer` in `../../../resources/stubs/System.Web.cs:218:22:218:39; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic interface IViewDataContainer\n{\n}\n\n// Generated from `System.Web.Mvc.ViewContext` in `../../../resources/stubs/System.Web.cs:214:18:214:28; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ViewContext : System.Web.Mvc.ControllerContext\n{\n}\n\n// Generated from `System.Web.Mvc.ViewResult` in `../../../resources/stubs/System.Web.cs:272:18:272:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ViewResult : System.Web.Mvc.ViewResultBase\n{\n}\n\n// Generated from `System.Web.Mvc.ViewResultBase` in `../../../resources/stubs/System.Web.cs:268:18:268:31; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class ViewResultBase : System.Web.Mvc.ActionResult\n{\n}\n\n}\nnamespace Routing\n{\n// Generated from `System.Web.Routing.RequestContext` in `../../../resources/stubs/System.Web.cs:299:18:299:31; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class RequestContext\n{\n}\n\n}\nnamespace Script\n{\nnamespace Serialization\n{\n// Generated from `System.Web.Script.Serialization.JavaScriptTypeResolver` in `../../../resources/stubs/System.Web.cs:364:27:364:48; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic abstract class JavaScriptTypeResolver\n{\n}\n\n}\n}\nnamespace Security\n{\n// Generated from `System.Web.Security.MembershipUser` in `../../../resources/stubs/System.Web.cs:322:18:322:31; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class MembershipUser\n{\n}\n\n}\nnamespace SessionState\n{\n// Generated from `System.Web.SessionState.HttpSessionState` in `../../../resources/stubs/System.Web.cs:200:18:200:33; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class HttpSessionState\n{\n}\n\n}\nnamespace UI\n{\n// Generated from `System.Web.UI.Control` in `../../../resources/stubs/System.Web.cs:76:18:76:24; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class Control\n{\n}\n\nnamespace WebControls\n{\n// Generated from `System.Web.UI.WebControls.WebControl` in `../../../resources/stubs/System.Web.cs:104:18:104:27; System.Web, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null`\npublic class WebControl : System.Web.UI.Control\n{\n}\n\n}\n}\n}\n}\n\n\n | diff --git a/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj b/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj +++ b/csharp/ql/test/resources/stubs/Antlr3.Runtime/3.5.1/Antlr3.Runtime.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Dapper/2.0.90/Dapper.csproj b/csharp/ql/test/resources/stubs/Dapper/2.0.90/Dapper.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Dapper/2.0.90/Dapper.csproj +++ b/csharp/ql/test/resources/stubs/Dapper/2.0.90/Dapper.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj b/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj +++ b/csharp/ql/test/resources/stubs/Iesi.Collections/4.0.4/Iesi.Collections.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/6.0.0/Microsoft.Extensions.Primitives.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/6.0.0/Microsoft.Extensions.Primitives.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/6.0.0/Microsoft.Extensions.Primitives.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/6.0.0/Microsoft.Extensions.Primitives.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.NETCore.Platforms/3.1.0/Microsoft.NETCore.Platforms.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Microsoft.Win32.Registry/4.7.0/Microsoft.Win32.Registry.csproj b/csharp/ql/test/resources/stubs/Microsoft.Win32.Registry/4.7.0/Microsoft.Win32.Registry.csproj index e85d095ac53..afc8dcb53ac 100644 --- a/csharp/ql/test/resources/stubs/Microsoft.Win32.Registry/4.7.0/Microsoft.Win32.Registry.csproj +++ b/csharp/ql/test/resources/stubs/Microsoft.Win32.Registry/4.7.0/Microsoft.Win32.Registry.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/NHibernate/5.3.8/NHibernate.csproj b/csharp/ql/test/resources/stubs/NHibernate/5.3.8/NHibernate.csproj index 618c2e10562..21acef4ba53 100644 --- a/csharp/ql/test/resources/stubs/NHibernate/5.3.8/NHibernate.csproj +++ b/csharp/ql/test/resources/stubs/NHibernate/5.3.8/NHibernate.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.1/Newtonsoft.Json.csproj b/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.1/Newtonsoft.Json.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.1/Newtonsoft.Json.csproj +++ b/csharp/ql/test/resources/stubs/Newtonsoft.Json/13.0.1/Newtonsoft.Json.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj b/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj index e0a19817ca4..c5bd405920c 100644 --- a/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj +++ b/csharp/ql/test/resources/stubs/Remotion.Linq.EagerFetching/2.2.0/Remotion.Linq.EagerFetching.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj b/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj +++ b/csharp/ql/test/resources/stubs/Remotion.Linq/2.2.0/Remotion.Linq.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj index 55204146344..dfa14fb4a16 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Client/5.11.0/ServiceStack.Client.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj index 55204146344..dfa14fb4a16 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Common/5.11.0/ServiceStack.Common.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Interfaces/5.11.0/ServiceStack.Interfaces.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj index 28ab0bdded8..9ebcc948a8e 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite.SqlServer/5.11.0/ServiceStack.OrmLite.SqlServer.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj index 8892d1db1e6..d9ae08d3e14 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.OrmLite/5.11.0/ServiceStack.OrmLite.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj index 8892d1db1e6..d9ae08d3e14 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Redis/5.11.0/ServiceStack.Redis.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj b/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack.Text/5.11.0/ServiceStack.Text.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj b/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj index 28e9013b823..1358797c51a 100644 --- a/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj +++ b/csharp/ql/test/resources/stubs/ServiceStack/5.11.0/ServiceStack.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/4.4.1/System.Configuration.ConfigurationManager.csproj b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/4.4.1/System.Configuration.ConfigurationManager.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/4.4.1/System.Configuration.ConfigurationManager.csproj +++ b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/4.4.1/System.Configuration.ConfigurationManager.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.2/System.Data.SqlClient.csproj b/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.2/System.Data.SqlClient.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.2/System.Data.SqlClient.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.2/System.Data.SqlClient.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj b/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj index dc65ec7a17f..252eddf5f12 100644 --- a/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj +++ b/csharp/ql/test/resources/stubs/System.Data.SqlClient/4.8.3/System.Data.SqlClient.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj b/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj +++ b/csharp/ql/test/resources/stubs/System.Drawing.Common/4.7.0/System.Drawing.Common.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj b/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj index 94080f732d7..018413bd509 100644 --- a/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.AccessControl/4.7.0/System.Security.AccessControl.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/System.Security.Principal.Windows/4.7.0/System.Security.Principal.Windows.csproj b/csharp/ql/test/resources/stubs/System.Security.Principal.Windows/4.7.0/System.Security.Principal.Windows.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/System.Security.Principal.Windows/4.7.0/System.Security.Principal.Windows.csproj +++ b/csharp/ql/test/resources/stubs/System.Security.Principal.Windows/4.7.0/System.Security.Principal.Windows.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj index 01f1dc2068d..73c71ffe29b 100644 --- a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj +++ b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj index d00db04fb4f..070730a8f3e 100644 --- a/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +++ b/csharp/ql/test/resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.7.0/runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.7.0/runtime.native.System.Data.SqlClient.sni.csproj index 94c40b4e84c..2fa29f9485e 100644 --- a/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.7.0/runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.native.System.Data.SqlClient.sni/4.7.0/runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-arm64.runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x64.runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj b/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj index 36eddf7809c..a04faa3ef58 100644 --- a/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj +++ b/csharp/ql/test/resources/stubs/runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0/runtime.win-x86.runtime.native.System.Data.SqlClient.sni.csproj @@ -1,6 +1,6 @@ - net5.0 + net6.0 true bin\ false diff --git a/docs/codeql/codeql-cli/extractor-options.rst b/docs/codeql/codeql-cli/extractor-options.rst index 4a95f5d0d92..f688025a4d7 100644 --- a/docs/codeql/codeql-cli/extractor-options.rst +++ b/docs/codeql/codeql-cli/extractor-options.rst @@ -10,32 +10,34 @@ setting extractor configuration options through the CodeQL CLI. About extractor options ----------------------- -Each extractor defines its own set of configuration options. To find out which options are available for a particular extractor, you can run ``codeql resolve languages`` or ``codeql resolve extractor`` with the ``--format=betterjson`` option. The ``betterjson`` output format provides the root paths of extractors and additional information. The output of ``codeql resolve extractor --format=betterjson`` will often be formatted like the following example:: +Each extractor defines its own set of configuration options. To find out which options are available for a particular extractor, you can run ``codeql resolve languages`` or ``codeql resolve extractor`` with the ``--format=betterjson`` option. The ``betterjson`` output format provides the root paths of extractors and additional information. The output of ``codeql resolve extractor --format=betterjson`` will often be formatted like the following example: + +.. code-block:: json { - "extractor_root" : "/home/user/codeql/java", - "extractor_options" : { - "option1" : { - "title" : "Java extractor option 1", - "description" : "An example string option for the Java extractor.", - "type" : "string", - "pattern" : "[a-z]+" - }, - "group1" : { - "title" : "Java extractor group 1", - "description" : "An example option group for the Java extractor.", - "type" : "object", - "properties" : { - "option2" : { - "title" : "Java extractor option 2", - "description" : "An example array option for the Java extractor", - "type" : "array", - "pattern" : "[1-9][0-9]*" + "extractor_root" : "/home/user/codeql/java", + "extractor_options" : { + "option1" : { + "title" : "Java extractor option 1", + "description" : "An example string option for the Java extractor.", + "type" : "string", + "pattern" : "[a-z]+" + }, + "group1" : { + "title" : "Java extractor group 1", + "description" : "An example option group for the Java extractor.", + "type" : "object", + "properties" : { + "option2" : { + "title" : "Java extractor option 2", + "description" : "An example array option for the Java extractor", + "type" : "array", + "pattern" : "[1-9][0-9]*" + } } - } - } - } - } + } + } + } The extractor option names and descriptions are listed under ``extractor_options``. Each option may contain the following fields: @@ -93,27 +95,31 @@ You can also set extractor options through a file. The CodeQL CLI subcommands th Each option file contains a tree structure of nested maps. At the root is an extractor map key, and beneath it are map keys that correspond to extractor names. Starting at the third level, there are extractor options and option groups. -In JSON:: +In JSON: + +.. code-block:: json { "extractor" : { - “java”: { - "option1" : “abc”, - "group1" : { - "option2" : [ 102 ] - } - } - } - } + "java": { + "option1" : "abc", + "group1" : { + "option2" : [ 102 ] + } + } + } + } -In YAML:: +In YAML: + +.. code-block:: yaml extractor: - java: - option1: “abc” - group1: - option2: [ 102 ] + java: + option1: "abc" + group1: + option2: [ 102 ] The value for a ``string`` extractor option must be a string or a number (which will be converted to a string before further processing). @@ -123,14 +129,16 @@ The value for an option group (of type ``object``) must be a map, which may cont Each extractor option value must match the regular expression pattern of the extractor option (if it exists), and it must not contain newline characters. -Assigning an extractor option that does not exist is an error. You can make the CodeQL CLI ignore unknown extractor options by using a special ``__allow_unknown_properties`` Boolean field. For example, the following option file asks the CodeQL CLI to ignore all unknown extractor options and option groups under ``group1``:: +Assigning an extractor option that does not exist is an error. You can make the CodeQL CLI ignore unknown extractor options by using a special ``__allow_unknown_properties`` Boolean field. For example, the following option file asks the CodeQL CLI to ignore all unknown extractor options and option groups under ``group1``: + +.. code-block:: yaml extractor: - java: - option1: “abc” - group1: - __allow_unknown_properties: true - option2: [ 102 ] + java: + option1: "abc" + group1: + __allow_unknown_properties: true + option2: [ 102 ] You can specify ``--extractor-options-file`` multiple times. The extractor option assignments are processed in the following order: 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 a3e4c1b5504..aba683a5e05 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 @@ -200,7 +200,8 @@ clone and rename the repository in a single step by running The CodeQL libraries and queries for Go analysis live in the `CodeQL for Go repository `__. Clone a copy of this -repository into ``codeql-home``. +repository into ``codeql-home``, and run ``codeql-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 diff --git a/docs/codeql/ql-language-reference/formulas.rst b/docs/codeql/ql-language-reference/formulas.rst index b4bc7481aeb..b92ca96142c 100644 --- a/docs/codeql/ql-language-reference/formulas.rst +++ b/docs/codeql/ql-language-reference/formulas.rst @@ -154,7 +154,7 @@ For example, ``isThree(x)`` might be a call to a predicate that holds if the arg A call to a predicate can also contain a closure operator, namely ``*`` or ``+``. For example, ``a.isChildOf+(b)`` is a call to the :ref:`transitive closure ` of -``isChildOf()``, so it holds if ``a`` is a descendent of ``b``. +``isChildOf()``, so it holds if ``a`` is a descendant of ``b``. The predicate reference must resolve to exactly one predicate. For more information about how a predicate reference is resolved, see ":ref:`name-resolution`." diff --git a/docs/codeql/support/reusables/frameworks.rst b/docs/codeql/support/reusables/frameworks.rst index 5aa1eea4cfc..246b03ee85f 100644 --- a/docs/codeql/support/reusables/frameworks.rst +++ b/docs/codeql/support/reusables/frameworks.rst @@ -171,6 +171,8 @@ Python built-in support Twisted, Web framework Flask-Admin, Web framework starlette, Asynchronous Server Gateway Interface (ASGI) + python-ldap, Lightweight Directory Access Protocol (LDAP) + ldap3, Lightweight Directory Access Protocol (LDAP) requests, HTTP client dill, Serialization PyYAML, Serialization diff --git a/docs/codeql/support/reusables/versions-compilers.rst b/docs/codeql/support/reusables/versions-compilers.rst index 8205204daea..356bc6c10df 100644 --- a/docs/codeql/support/reusables/versions-compilers.rst +++ b/docs/codeql/support/reusables/versions-compilers.rst @@ -11,11 +11,11 @@ Microsoft extensions (up to VS 2019), Arm Compiler 5 [3]_","``.cpp``, ``.c++``, ``.cxx``, ``.hpp``, ``.hh``, ``.h++``, ``.hxx``, ``.c``, ``.cc``, ``.h``" - C#,C# up to 9.0,"Microsoft Visual Studio up to 2019 with .NET up to 4.8, + C#,C# up to 10.0,"Microsoft Visual Studio up to 2019 with .NET up to 4.8, .NET Core up to 3.1 - .NET 5","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" + .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 16 [4]_","javac (OpenJDK and Oracle JDK), diff --git a/docs/codeql/writing-codeql-queries/metadata-for-codeql-queries.rst b/docs/codeql/writing-codeql-queries/metadata-for-codeql-queries.rst index a4b57706bb1..040f873d410 100644 --- a/docs/codeql/writing-codeql-queries/metadata-for-codeql-queries.rst +++ b/docs/codeql/writing-codeql-queries/metadata-for-codeql-queries.rst @@ -52,11 +52,6 @@ The following properties are supported by all query files: | ``@security-severity``| ```` | Defines the level of severity, between 0.0 and 10.0, for queries with ``@tags security``. For more information about calculating ``@security-severity``, see the `GitHub changelog `__. | +-----------------------+---------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -Additional properties for filter queries ----------------------------------------- - -Filter queries are used to define additional constraints to limit the results that are returned by other queries. A filter query must have the same ``@kind`` property as the query whose results it is filtering. No additional metadata properties are required. - Example ------- diff --git a/docs/prepare-db-upgrade.md b/docs/prepare-db-upgrade.md new file mode 100644 index 00000000000..906c47d9c6d --- /dev/null +++ b/docs/prepare-db-upgrade.md @@ -0,0 +1,135 @@ +# Upgrading a language database schema + +When a `.dbscheme` file changes, you need to provide two things: + +1. An upgrade script that modifies old databases (built against an earlier schema), so they can use new query functionality (albeit with possibly degraded results). +2. A downgrade script that reverses those changes, so that newer databases can be queried using older query and library packs. + +This document explains how to write or generate those scripts. + +## Process Overview + + 1. Commit the change to your language's `.dbscheme` file, along with any library updates required to work with the change. + 2. Run `misc/scripts/prepare-db-upgrade.sh --lang `. This will generate skeleton upgrade/downgrade scripts in the appropriate directories. + 3. Fill in the details in the two `upgrade.properties` files that it generated, and add any required upgrade queries. + +It may be helpful to look at some of the existing upgrade/downgrade scripts, to see how they work. + +## Details + +An `upgrade.properties` file will look something like: + +``` +description: what it does +compatibility: partial +some_relation.rel: run some_relation.qlo +``` + +The `description` field is a textual description of the aim of the upgrade. + +The `compatibility` field takes one of four values: + + * **full**: results from the upgraded snapshot will be identical to results from a snapshot built with the new version of the toolchain. + + * **backwards**: the step is safe and preserves the meaning of the old database, but new features may not work correctly on the upgraded snapshot. + + * **partial**: the step is safe and preserves the meaning of the old database, but you would get better results if you rebuilt the snapshot with the new version of the toolchain. + + * **breaking**: the step is unsafe and will prevent certain queries from working. + +The `some_relation.rel` line(s) are the actions required to perform the database upgrade. Do a diff on the the new vs old `.dbscheme` file to get an idea of what they have to achieve. Sometimes you won't need any upgrade commands – this happens when the dbscheme has changed in "cosmetic" ways, for example by adding/removing comments or changing union type relationships, but still retains the same on-disk format for all tables; the purpose of the upgrade script is then to document the fact that it's safe to replace the old dbscheme with the new one. + +Ideally, your downgrade script will perfectly revert the changes applied by the upgrade script, such that applying the upgrade and then the downgrade will result in the same database you started with. + +Some typical upgrade commands look like this: + +``` +// Delete a relation that has been replaced in the new scheme +obsolete.rel: delete + +// Create a new version of a table by applying an expression (using a simple +// synthetic language) to an existing table. The example duplicates the 'id' +// column of input.rel as the last column of extended.rel, perhaps to record our +// best guess at newly-populated "source declaration" information. +extended.rel: reorder input.rel (int id, string name, int parent) id name parent id + +// Create relationname.rel by running relationname.qlo and writing the query +// results as a .rel file. The query file should be named relationname.ql and +// should be placed in the upgrade directory. It should avoid using the default +// QLL library, and will run in the context of the *old* dbscheme. +relationname.rel: run relationname.qlo +``` + +### Testing your scripts + +Although we have some automated testing of the scripts (e.g. to test that you can upgrade databases all the way from an initial dbscheme to the newest, and back), it's essential that you apply some more rigorous testing for any non-trivial upgrade or downgrade. You might do so as follows: + +#### Running qltests + +To test the upgrade script, run: + +``` +codeql test run --search-path= --search-path=ql +``` + +Where `` is an extractor pack containing the old extractor and dbscheme that pre-date your changes, and `` is the directory containing the qltests for your language. This will run the tests using an old extractor, and the test databases will all be upgraded in place using your new upgrade script. + +To test the downgrade script, create an extractor pack that includes your new dbscheme and extractor changes. Then checkout the `main` branch of `codeql` (i.e. a branch that does not include your changes), and run: + +``` +codeql test run --search-path= +``` + +This will run the tests using your new extractor, and the databases will be downgraded using your new downgrade script so that they match the dbscheme of the `main` branch. + +#### Manual testing + +You might also choose to test with a real-world database. + + 1. Create a snapshot of your favourite project using the old version of the code. + + 2. Switch to the new version of the code. + + 3. Try to run some queries that will depend on your upgrade script working correctly. + + 4. Observe the upgrade being performed in the query server log. + + 5. Verify that your queries produced sensible results. + +#### Doing the upgrade manually + +To create the upgrade directory manually, without using `prepare-db-upgrade.sh`: + +1. Get a hash of the old `.dbscheme` file from `main` (i.e. from just before your changes). You can do this by checking out the code prior to your changes and running `git hash-object ql/lib/.dbscheme` + +2. Go back to your branch and create an upgrade directory with that hash as its name, for example: +``` +mkdir ql/lib/upgrades/454f1e15151422355049dc4f1f0486a03baeffef +``` + + +3. Copy the old `.dbscheme` file to that directory, using the name old.dbscheme. + +``` +cp ql/lib/.dbscheme ql/lib/upgrades/454f1e15151422355049dc4f1f0486a03baeffef/old.dbscheme +``` + +4. Put a copy of your new `.dbscheme` file in that directory and create an `upgrade.properties` file (as described above). + +#### Doing the downgrade manually + +The process is similar for downgrade scripts, but there is a reversal in terminology: your **new** dbscheme will now be the one called `old.dbscheme`. + +1. Get a hash of your new `.dbscheme` file, with `git hash-object ql/lib/.dbscheme` + +2. Create a downgrade directory with that hash as its name, for example: +``` +mkdir downgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a +``` + +3. Copy your new `.dbscheme` file to that directory, using the name `old.dbscheme`. +``` +cp ql/lib/.dbscheme ql/lib/upgrades/454f1e15151422355049dc4f1f0486a03baeffef/old.dbscheme +``` + +4. Put a copy of the `.dbscheme` from `main` in that directory and create an `upgrade.properties` file that performs the downgrade (as described above). diff --git a/docs/ql-libraries/dataflow/dataflow.md b/docs/ql-libraries/dataflow/dataflow.md index 1a83d0c8e05..31a8e12a5cc 100644 --- a/docs/ql-libraries/dataflow/dataflow.md +++ b/docs/ql-libraries/dataflow/dataflow.md @@ -92,7 +92,7 @@ Recommendations: See the C/C++ implementation, which makes use of this feature. Another use of this indirection is to hide synthesized local steps that are only relevant for global flow. See the C# implementation for an example of this. -* Define `predicate localFlow(Node node1, Node node2) { localFlowStep*(node1, node2) }`. +* Define `pragma[inline] predicate localFlow(Node node1, Node node2) { localFlowStep*(node1, node2) }`. * Make the local flow step relation in `simpleLocalFlowStep` follow def-to-first-use and use-to-next-use steps for SSA variables. Def-use steps also work, but the upside of `use-use` steps is that sources defined in terms diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 8b14e2a95af..13287d2972c 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -1,111 +1,112 @@ -package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:intent-start,sink:jexl,sink:jndi-injection,sink:ldap,sink:logging,sink:mvel,sink:ognl-injection,sink:open-url,sink:pending-intent-sent,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:write-file,sink:xpath,sink:xslt,sink:xss,source:contentprovider,source:remote,summary:taint,summary:value -android.app,16,,103,,,,,,7,,,,,,,,9,,,,,,,,,,,18,85 -android.content,24,27,96,,,,,,16,,,,,,,,,,8,,,,,,,27,,31,65 -android.database,59,,30,,,,,,,,,,,,,,,,59,,,,,,,,,30, -android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,45,15 -android.os,,,122,,,,,,,,,,,,,,,,,,,,,,,,,41,81 -android.util,6,16,,,,,,,,,,,6,,,,,,,,,,,,,,16,, -android.webkit,3,2,,,,,,,,,,,,,,,,,,,,,,,3,,2,, -androidx.slice,2,5,88,,,,,,,,,,,,,,2,,,,,,,,,5,,27,61 -cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -com.fasterxml.jackson.databind,,,6,,,,,,,,,,,,,,,,,,,,,,,,,6, -com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,,,,,,,62,23 -com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,17 -com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,2,551 -com.google.common.flogger,29,,,,,,,,,,,,29,,,,,,,,,,,,,,,, -com.google.common.io,6,,73,,,,,,,,,,,,,,,,,6,,,,,,,,72,1 -com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,,,3,,,,,,,,,,,,,, -com.unboundid.ldap.sdk,17,,,,,,,,,,,17,,,,,,,,,,,,,,,,, -flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1 -groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,,,,,,,, -groovy.util,5,,,,,5,,,,,,,,,,,,,,,,,,,,,,, -jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,,,,,,2,,7,, -jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -jakarta.ws.rs.client,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,9,, -jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,2,,,,,,,94,55 -java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,37,,31,,15,,,,,,,,,,,,,,,,,22,,,,,,31, -java.lang,8,,58,,,,,,,,,,8,,,,,,,,,,,,,,,46,12 -java.net,10,3,7,,,,,,,,,,,,,10,,,,,,,,,,,3,7, -java.nio,15,,6,,13,,,,,,,,,,,,,,,,,2,,,,,,6, -java.sql,7,,,,,,,,,,,,,,,,,,7,,,,,,,,,, -java.util,34,,438,,,,,,,,,,34,,,,,,,,,,,,,,,24,414 -javax.faces.context,2,7,,,,,,,,,,,,,,,,,,,,,,,2,,7,, -javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,100,23 -javax.management.remote,2,,,,,,,,,,2,,,,,,,,,,,,,,,,,, -javax.naming,7,,,,,,,,,,6,1,,,,,,,,,,,,,,,,, -javax.net.ssl,2,,,,,,,,,,,,,,,,,2,,,,,,,,,,, -javax.script,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,, -javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,,,,,,,21,2, -javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,1,, -javax.ws.rs.client,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,, -javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,9,, -javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,,,,2,,,,,,,94,55 -javax.xml.transform,1,,6,,,,,,,,,,,,,,,,,,,,,1,,,,6, -javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,3,,,,,, -jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,10 -net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,5,,,,, -ognl,6,,,,,,,,,,,,,,6,,,,,,,,,,,,,, -org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,6, -org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,17,783 -org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,17,783 -org.apache.commons.io,93,2,565,,78,,,,,,,,,,,15,,,,,,,,,,,2,551,14 -org.apache.commons.jexl2,15,,,,,,,,,15,,,,,,,,,,,,,,,,,,, -org.apache.commons.jexl3,15,,,,,,,,,15,,,,,,,,,,,,,,,,,,, -org.apache.commons.lang3,,,424,,,,,,,,,,,,,,,,,,,,,,,,,293,131 -org.apache.commons.logging,6,,,,,,,,,,,,6,,,,,,,,,,,,,,,, -org.apache.commons.ognl,6,,,,,,,,,,,,,,6,,,,,,,,,,,,,, -org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,220,52 -org.apache.directory.ldap.client.api,1,,,,,,,,,,,1,,,,,,,,,,,,,,,,, -org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,,,,,,1,,2,39, -org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,,,,,,2, -org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,18,6 -org.apache.http,27,3,70,,,,,,,,,,,,,25,,,,,,,,,2,,3,62,8 -org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,,,,6,,,,,,,,,, -org.apache.log4j,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,, -org.apache.logging.log4j,359,,8,,,,,,,,,,359,,,,,,,,,,,,,,,4,4 -org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.shiro.jndi,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,, -org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,, -org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,20,,,,,, -org.hibernate,7,,,,,,,,,,,,,,,,,,7,,,,,,,,,, -org.jboss.logging,324,,,,,,,,,,,,324,,,,,,,,,,,,,,,, -org.jooq,1,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,198,38 -org.mvel2,16,,,,,,,,,,,,,16,,,,,,,,,,,,,,, -org.scijava.log,13,,,,,,,,,,,,13,,,,,,,,,,,,,,,, -org.slf4j,55,,6,,,,,,,,,,55,,,,,,,,,,,,,,,2,4 -org.springframework.beans,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,26 -org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,13 -org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,3, -org.springframework.http,14,,70,,,,,,,,,,,,,14,,,,,,,,,,,,60,10 -org.springframework.jdbc.core,10,,,,,,,,,,,,,,,,,,10,,,,,,,,,, -org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,9,,,,,,,,,, -org.springframework.jndi,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,, -org.springframework.ldap,47,,,,,,,,,,33,14,,,,,,,,,,,,,,,,, -org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,6,, -org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,32 -org.springframework.util,,,139,,,,,,,,,,,,,,,,,,,,,,,,,87,52 -org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,13, -org.springframework.web.client,13,3,,,,,,,,,,,,,,13,,,,,,,,,,,3,, -org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,8,, -org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,12,13, -org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,2,,,,,,,,,,,,, -org.springframework.web.util,,,163,,,,,,,,,,,,,,,,,,,,,,,,,138,25 -org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,3,, -play.mvc,,4,,,,,,,,,,,,,,,,,,,,,,,,,4,, -ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,48 -ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,3, -ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,35 -ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,6,4, -ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,10,10, -ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,35 +package,sink,source,summary,sink:bean-validation,sink:create-file,sink:groovy,sink:header-splitting,sink:information-leak,sink:intent-start,sink:jexl,sink:jndi-injection,sink:ldap,sink:logging,sink:mvel,sink:ognl-injection,sink:open-url,sink:pending-intent-sent,sink:set-hostname-verifier,sink:sql,sink:url-open-stream,sink:url-redirect,sink:write-file,sink:xpath,sink:xslt,sink:xss,source:android-widget,source:contentprovider,source:remote,summary:taint,summary:value +android.app,16,,103,,,,,,7,,,,,,,,9,,,,,,,,,,,,18,85 +android.content,24,27,100,,,,,,16,,,,,,,,,,8,,,,,,,,27,,31,69 +android.database,59,,30,,,,,,,,,,,,,,,,59,,,,,,,,,,30, +android.net,,,60,,,,,,,,,,,,,,,,,,,,,,,,,,45,15 +android.os,,,122,,,,,,,,,,,,,,,,,,,,,,,,,,41,81 +android.util,6,16,,,,,,,,,,,6,,,,,,,,,,,,,,,16,, +android.webkit,3,2,,,,,,,,,,,,,,,,,,,,,,,3,,,2,, +android.widget,,1,1,,,,,,,,,,,,,,,,,,,,,,,1,,,1, +androidx.slice,2,5,88,,,,,,,,,,,,,,2,,,,,,,,,,5,,27,61 +cn.hutool.core.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.esotericsoftware.kryo5.io,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.core,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +com.fasterxml.jackson.databind,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,6, +com.google.common.base,,,85,,,,,,,,,,,,,,,,,,,,,,,,,,62,23 +com.google.common.cache,,,17,,,,,,,,,,,,,,,,,,,,,,,,,,,17 +com.google.common.collect,,,553,,,,,,,,,,,,,,,,,,,,,,,,,,2,551 +com.google.common.flogger,29,,,,,,,,,,,,29,,,,,,,,,,,,,,,,, +com.google.common.io,6,,73,,,,,,,,,,,,,,,,,6,,,,,,,,,72,1 +com.opensymphony.xwork2.ognl,3,,,,,,,,,,,,,,3,,,,,,,,,,,,,,, +com.unboundid.ldap.sdk,17,,,,,,,,,,,17,,,,,,,,,,,,,,,,,, +flexjson,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +groovy.lang,26,,,,,26,,,,,,,,,,,,,,,,,,,,,,,, +groovy.util,5,,,,,5,,,,,,,,,,,,,,,,,,,,,,,, +jakarta.faces.context,2,7,,,,,,,,,,,,,,,,,,,,,,,2,,,7,, +jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +jakarta.ws.rs.client,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,9,, +jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,2,,,,,,,,94,55 +java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +java.io,37,,31,,15,,,,,,,,,,,,,,,,,22,,,,,,,31, +java.lang,8,,58,,,,,,,,,,8,,,,,,,,,,,,,,,,46,12 +java.net,10,3,7,,,,,,,,,,,,,10,,,,,,,,,,,,3,7, +java.nio,15,,6,,13,,,,,,,,,,,,,,,,,2,,,,,,,6, +java.sql,7,,,,,,,,,,,,,,,,,,7,,,,,,,,,,, +java.util,34,,438,,,,,,,,,,34,,,,,,,,,,,,,,,,24,414 +javax.faces.context,2,7,,,,,,,,,,,,,,,,,,,,,,,2,,,7,, +javax.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 +javax.management.remote,2,,,,,,,,,,2,,,,,,,,,,,,,,,,,,, +javax.naming,7,,,,,,,,,,6,1,,,,,,,,,,,,,,,,,, +javax.net.ssl,2,,,,,,,,,,,,,,,,,2,,,,,,,,,,,, +javax.script,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,, +javax.servlet,4,21,2,,,,3,1,,,,,,,,,,,,,,,,,,,,21,2, +javax.validation,1,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,, +javax.ws.rs.client,1,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, +javax.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,9,, +javax.ws.rs.core,3,,149,,,,1,,,,,,,,,,,,,,2,,,,,,,,94,55 +javax.xml.transform,1,,6,,,,,,,,,,,,,,,,,,,,,1,,,,,6, +javax.xml.xpath,3,,,,,,,,,,,,,,,,,,,,,,3,,,,,,, +jodd.json,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,10 +net.sf.saxon.s9api,5,,,,,,,,,,,,,,,,,,,,,,,5,,,,,, +ognl,6,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, +org.apache.commons.codec,,,6,,,,,,,,,,,,,,,,,,,,,,,,,,6, +org.apache.commons.collections,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,17,783 +org.apache.commons.io,93,2,565,,78,,,,,,,,,,,15,,,,,,,,,,,,2,551,14 +org.apache.commons.jexl2,15,,,,,,,,,15,,,,,,,,,,,,,,,,,,,, +org.apache.commons.jexl3,15,,,,,,,,,15,,,,,,,,,,,,,,,,,,,, +org.apache.commons.lang3,,,424,,,,,,,,,,,,,,,,,,,,,,,,,,293,131 +org.apache.commons.logging,6,,,,,,,,,,,,6,,,,,,,,,,,,,,,,, +org.apache.commons.ognl,6,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, +org.apache.commons.text,,,272,,,,,,,,,,,,,,,,,,,,,,,,,,220,52 +org.apache.directory.ldap.client.api,1,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, +org.apache.hc.core5.function,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,,,,,,1,,,2,39, +org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,2, +org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 +org.apache.http,27,3,70,,,,,,,,,,,,,25,,,,,,,,,2,,,3,62,8 +org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,,,,6,,,,,,,,,,, +org.apache.log4j,11,,,,,,,,,,,,11,,,,,,,,,,,,,,,,, +org.apache.logging.log4j,359,,8,,,,,,,,,,359,,,,,,,,,,,,,,,,4,4 +org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.apache.shiro.jndi,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,, +org.codehaus.groovy.control,1,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, +org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,20,,,,,,, +org.hibernate,7,,,,,,,,,,,,,,,,,,7,,,,,,,,,,, +org.jboss.logging,324,,,,,,,,,,,,324,,,,,,,,,,,,,,,,, +org.jooq,1,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +org.json,,,236,,,,,,,,,,,,,,,,,,,,,,,,,,198,38 +org.mvel2,16,,,,,,,,,,,,,16,,,,,,,,,,,,,,,, +org.scijava.log,13,,,,,,,,,,,,13,,,,,,,,,,,,,,,,, +org.slf4j,55,,6,,,,,,,,,,55,,,,,,,,,,,,,,,,2,4 +org.springframework.beans,,,26,,,,,,,,,,,,,,,,,,,,,,,,,,,26 +org.springframework.cache,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,,13 +org.springframework.context,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,3, +org.springframework.http,14,,70,,,,,,,,,,,,,14,,,,,,,,,,,,,60,10 +org.springframework.jdbc.core,10,,,,,,,,,,,,,,,,,,10,,,,,,,,,,, +org.springframework.jdbc.object,9,,,,,,,,,,,,,,,,,,9,,,,,,,,,,, +org.springframework.jndi,1,,,,,,,,,,1,,,,,,,,,,,,,,,,,,, +org.springframework.ldap,47,,,,,,,,,,33,14,,,,,,,,,,,,,,,,,, +org.springframework.security.web.savedrequest,,6,,,,,,,,,,,,,,,,,,,,,,,,,,6,, +org.springframework.ui,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,32 +org.springframework.util,,,139,,,,,,,,,,,,,,,,,,,,,,,,,,87,52 +org.springframework.validation,,,13,,,,,,,,,,,,,,,,,,,,,,,,,,13, +org.springframework.web.client,13,3,,,,,,,,,,,,,,13,,,,,,,,,,,,3,, +org.springframework.web.context.request,,8,,,,,,,,,,,,,,,,,,,,,,,,,,8,, +org.springframework.web.multipart,,12,13,,,,,,,,,,,,,,,,,,,,,,,,,12,13, +org.springframework.web.reactive.function.client,2,,,,,,,,,,,,,,,2,,,,,,,,,,,,,, +org.springframework.web.util,,,163,,,,,,,,,,,,,,,,,,,,,,,,,,138,25 +org.xml.sax,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,1, +org.xmlpull.v1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,3,, +play.mvc,,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,, +ratpack.core.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.core.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.core.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.exec,,,48,,,,,,,,,,,,,,,,,,,,,,,,,,,48 +ratpack.form,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,3, +ratpack.func,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35 +ratpack.handling,,6,4,,,,,,,,,,,,,,,,,,,,,,,,,6,4, +ratpack.http,,10,10,,,,,,,,,,,,,,,,,,,,,,,,,10,10, +ratpack.util,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35 diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index b4c5f42a80d..84470186ecc 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -7,7 +7,7 @@ Java framework & library support :widths: auto Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE‑022` :sub:`Path injection`,`CWE‑036` :sub:`Path traversal`,`CWE‑079` :sub:`Cross-site scripting`,`CWE‑089` :sub:`SQL injection`,`CWE‑090` :sub:`LDAP injection`,`CWE‑094` :sub:`Code injection`,`CWE‑319` :sub:`Cleartext transmission` - Android,``android.*``,45,411,108,,,3,67,,, + Android,``android.*``,46,416,108,,,3,67,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,,, `Apache Commons IO `_,``org.apache.commons.io``,2,565,93,78,,,,,,15 `Apache Commons Lang `_,``org.apache.commons.lang3``,,424,,,,,,,, @@ -19,5 +19,5 @@ Java framework & library support Java extensions,"``javax.*``, ``jakarta.*``",54,552,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,472,96,,,,19,14,,29 Others,"``androidx.slice``, ``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.unboundid.ldap.sdk``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.logging``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.logging.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jboss.logging``, ``org.jooq``, ``org.mvel2``, ``org.scijava.log``, ``org.slf4j``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``",44,283,921,,,,14,18,, - Totals,,182,6220,1424,106,6,10,107,33,1,81 + Totals,,183,6225,1424,106,6,10,107,33,1,81 diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index b30e54908d5..dbdff648dbe 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.0.9 + +## 0.0.8 + +### Deprecated APIs + +* The `codeql/java-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/java-all` CodeQL pack. + ## 0.0.7 ## 0.0.6 diff --git a/java/ql/lib/change-notes/2022-02-14-sealed-classes-predicates.md b/java/ql/lib/change-notes/2022-02-14-sealed-classes-predicates.md new file mode 100644 index 00000000000..294897514ce --- /dev/null +++ b/java/ql/lib/change-notes/2022-02-14-sealed-classes-predicates.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* Added predicates `ClassOrInterface.getAPermittedSubtype` and `isSealed` exposing information about sealed classes. diff --git a/java/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md b/java/ql/lib/change-notes/released/0.0.8.md similarity index 81% rename from java/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md rename to java/ql/lib/change-notes/released/0.0.8.md index c5442373daf..4b6d72cccde 100644 --- a/java/ql/lib/change-notes/2022-01-11-remove-upgrades-packs.md +++ b/java/ql/lib/change-notes/released/0.0.8.md @@ -1,4 +1,5 @@ ---- -category: deprecated ---- +## 0.0.8 + +### Deprecated APIs + * The `codeql/java-upgrades` CodeQL pack has been removed. All upgrades scripts have been merged into the `codeql/java-all` CodeQL pack. diff --git a/java/ql/lib/change-notes/released/0.0.9.md b/java/ql/lib/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..a64559b3ac8 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.0.9.md @@ -0,0 +1 @@ +## 0.0.9 diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index a2a5484910b..ecdd64fbab8 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.9 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index a210d35c140..7c06a164ee9 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.0.8-dev +version: 0.0.10-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/StringFormat.qll b/java/ql/lib/semmle/code/java/StringFormat.qll index 2938f5255fa..bfc893ab756 100644 --- a/java/ql/lib/semmle/code/java/StringFormat.qll +++ b/java/ql/lib/semmle/code/java/StringFormat.qll @@ -325,7 +325,7 @@ private predicate formatStringValue(Expr e, string fmtvalue) { or exists(Field f | e = f.getAnAccess() and - f.getDeclaringType().hasQualifiedName("java.io", "File") and + f.getDeclaringType() instanceof TypeFile and fmtvalue = "x" // dummy value | f.hasName("pathSeparator") or diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index 1d8e0f81e97..52da22dacc8 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -913,6 +913,12 @@ class ClassOrInterface extends RefType, @classorinterface { not this.isProtected() and not this.isPublic() } + + /** Gets a permitted subtype in case this class or interface is a sealed class (Java 17 feature). */ + ClassOrInterface getAPermittedSubtype() { permits(this, result) } + + /** Holds if this class or interface is explicitly or implicitly a sealed class (Java 17 feature). */ + predicate isSealed() { exists(this.getAPermittedSubtype()) } } private string getAPublicObjectMethodSignature() { diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index bea9cace0ff..bc5ef79c7a7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -78,10 +78,12 @@ private import FlowSummary private module Frameworks { private import internal.ContainerFlow private import semmle.code.java.frameworks.android.Android + private import semmle.code.java.frameworks.android.ContentProviders private import semmle.code.java.frameworks.android.Intent private import semmle.code.java.frameworks.android.Notifications private import semmle.code.java.frameworks.android.Slice private import semmle.code.java.frameworks.android.SQLite + private import semmle.code.java.frameworks.android.Widget private import semmle.code.java.frameworks.android.XssSinks private import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.apache.Collections diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index 5debcf7b178..50dcb8901ea 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -1290,7 +1290,7 @@ class DataFlowCallOption extends TDataFlowCallOption { } } -/** Content tagged with the type of a containing object. */ +/** A `Content` tagged with the type of a containing object. */ class TypedContent extends MkTypedContent { private Content c; private DataFlowType t; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 1ae6749877d..695f20110c1 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -74,12 +74,14 @@ private module ThisFlow { * Holds if data can flow from `node1` to `node2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localFlow(Node node1, Node node2) { localFlowStep*(node1, node2) } /** * Holds if data can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ +pragma[inline] predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } /** diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index 1ded4e7bed1..3cd828078bc 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -90,7 +90,9 @@ module Public { predicate contains(SummaryComponent c) { c = this.drop(_).head() } /** Gets the bottom element of this stack. */ - SummaryComponent bottom() { result = this.drop(this.length() - 1).head() } + SummaryComponent bottom() { + this = TSingletonSummaryComponentStack(result) or result = this.tail().bottom() + } /** Gets a textual representation of this stack. */ string toString() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 59608d792f2..4797dcfaf59 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -21,12 +21,14 @@ private import semmle.code.java.frameworks.JaxWS * Holds if taint can flow from `src` to `sink` in zero or more * local (intra-procedural) steps. */ +pragma[inline] 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. */ +pragma[inline] predicate localExprTaint(Expr src, Expr sink) { localTaint(DataFlow::exprNode(src), DataFlow::exprNode(sink)) } diff --git a/java/ql/lib/semmle/code/java/frameworks/Thrift.qll b/java/ql/lib/semmle/code/java/frameworks/Thrift.qll index bf826cfe47e..a441c6f7e56 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Thrift.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Thrift.qll @@ -25,6 +25,7 @@ class ThriftIface extends Interface { this.getFile() instanceof ThriftGeneratedFile } + /** Gets an implementation of a method of this interface. */ Method getAnImplementingMethod() { result.getDeclaringType().(Class).getASupertype+() = this and result.overrides+(this.getAMethod()) and diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index 41ad2d14968..b1a0d49e96f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -177,42 +177,6 @@ private class UriModel extends SummaryModelCsv { } } -private class ContentProviderSourceModels extends SourceModelCsv { - override predicate row(string row) { - row = - [ - // ContentInterface models are here for backwards compatibility (it was removed in API 28) - "android.content;ContentInterface;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", - "android.content;ContentProvider;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", - "android.content;ContentProvider;true;call;(String,String,Bundle);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;delete;(Uri,String,String[]);;Parameter[0..2];contentprovider", - "android.content;ContentInterface;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", - "android.content;ContentProvider;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", - "android.content;ContentInterface;true;getType;(Uri);;Parameter[0];contentprovider", - "android.content;ContentProvider;true;getType;(Uri);;Parameter[0];contentprovider", - "android.content;ContentInterface;true;insert;(Uri,ContentValues,Bundle);;Parameter[0];contentprovider", - "android.content;ContentProvider;true;insert;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;insert;(Uri,ContentValues);;Parameter[0..1];contentprovider", - "android.content;ContentInterface;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", - "android.content;ContentProvider;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", - "android.content;ContentProvider;true;openAssetFile;(Uri,String);;Parameter[0];contentprovider", - "android.content;ContentInterface;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle);;Parameter[0..2];contentprovider", - "android.content;ContentInterface;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", - "android.content;ContentProvider;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", - "android.content;ContentProvider;true;openFile;(Uri,String);;Parameter[0];contentprovider", - "android.content;ContentInterface;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String);;Parameter[0..4];contentprovider", - "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String,CancellationSignal);;Parameter[0..4];contentprovider", - "android.content;ContentInterface;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", - "android.content;ContentProvider;true;update;(Uri,ContentValues,String,String[]);;Parameter[0..3];contentprovider" - ] - } -} - /** Interface for classes whose instances can be written to and restored from a Parcel. */ class TypeParcelable extends Interface { TypeParcelable() { this.hasQualifiedName("android.os", "Parcelable") } diff --git a/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll b/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll new file mode 100644 index 00000000000..42c22fcf871 --- /dev/null +++ b/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll @@ -0,0 +1,59 @@ +/** + * Provides classes and predicates for working with Content Providers. + */ + +import java +import semmle.code.java.dataflow.ExternalFlow + +/** The class `android.content.ContentValues`. */ +class ContentValues extends Class { + ContentValues() { this.hasQualifiedName("android.content", "ContentValues") } +} + +private class ContentProviderSourceModels extends SourceModelCsv { + override predicate row(string row) { + row = + [ + // ContentInterface models are here for backwards compatibility (it was removed in API 28) + "android.content;ContentInterface;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", + "android.content;ContentProvider;true;call;(String,String,String,Bundle);;Parameter[0..3];contentprovider", + "android.content;ContentProvider;true;call;(String,String,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;delete;(Uri,String,String[]);;Parameter[0..2];contentprovider", + "android.content;ContentInterface;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", + "android.content;ContentProvider;true;delete;(Uri,Bundle);;Parameter[0..1];contentprovider", + "android.content;ContentInterface;true;getType;(Uri);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;getType;(Uri);;Parameter[0];contentprovider", + "android.content;ContentInterface;true;insert;(Uri,ContentValues,Bundle);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;insert;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;insert;(Uri,ContentValues);;Parameter[0..1];contentprovider", + "android.content;ContentInterface;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openAssetFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openAssetFile;(Uri,String);;Parameter[0];contentprovider", + "android.content;ContentInterface;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;openTypedAssetFile;(Uri,String,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentInterface;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openFile;(Uri,String,CancellationSignal);;Parameter[0];contentprovider", + "android.content;ContentProvider;true;openFile;(Uri,String);;Parameter[0];contentprovider", + "android.content;ContentInterface;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;query;(Uri,String[],Bundle,CancellationSignal);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String);;Parameter[0..4];contentprovider", + "android.content;ContentProvider;true;query;(Uri,String[],String,String[],String,CancellationSignal);;Parameter[0..4];contentprovider", + "android.content;ContentInterface;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;update;(Uri,ContentValues,Bundle);;Parameter[0..2];contentprovider", + "android.content;ContentProvider;true;update;(Uri,ContentValues,String,String[]);;Parameter[0..3];contentprovider" + ] + } +} + +private class SummaryModels extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "android.content;ContentValues;false;put;;;Argument[0];MapKey of Argument[-1];value", + "android.content;ContentValues;false;put;;;Argument[1];MapValue of Argument[-1];value", + "android.content;ContentValues;false;putAll;;;MapKey of Argument[0];MapKey of Argument[-1];value", + "android.content;ContentValues;false;putAll;;;MapValue of Argument[0];MapValue of Argument[-1];value" + ] + } +} diff --git a/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll b/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll index 1d189cca569..684df41ac56 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll @@ -1,3 +1,5 @@ +/** Provides classes and predicates for working with SQLite databases. */ + import java import Android import semmle.code.java.dataflow.FlowSteps @@ -24,6 +26,20 @@ class TypeDatabaseUtils extends Class { TypeDatabaseUtils() { hasQualifiedName("android.database", "DatabaseUtils") } } +/** + * The class `android.database.sqlite.SQLiteOpenHelper`. + */ +class TypeSQLiteOpenHelper extends Class { + TypeSQLiteOpenHelper() { this.hasQualifiedName("android.database.sqlite", "SQLiteOpenHelper") } +} + +/** + * The class `android.database.sqlite.SQLiteStatement`. + */ +class TypeSQLiteStatement extends Class { + TypeSQLiteStatement() { this.hasQualifiedName("android.database.sqlite", "SQLiteStatement") } +} + private class SQLiteSinkCsv extends SinkModelCsv { override predicate row(string row) { row = diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll b/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll new file mode 100644 index 00000000000..c5eda29547b --- /dev/null +++ b/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll @@ -0,0 +1,23 @@ +/** Provides classes and predicates for working with Android widgets. */ + +import java +import semmle.code.java.dataflow.ExternalFlow +import semmle.code.java.dataflow.FlowSources + +private class AndroidWidgetSourceModels extends SourceModelCsv { + override predicate row(string row) { + row = "android.widget;EditText;true;getText;;;ReturnValue;android-widget" + } +} + +private class DefaultAndroidWidgetSources extends RemoteFlowSource { + DefaultAndroidWidgetSources() { sourceNode(this, "android-widget") } + + override string getSourceType() { result = "Android widget source" } +} + +private class AndroidWidgetSummaryModels extends SummaryModelCsv { + override predicate row(string row) { + row = "android.widget;EditText;true;getText;;;Argument[-1];ReturnValue;taint" + } +} diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll index c62b72ab9fc..67c66d6d817 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll @@ -244,7 +244,7 @@ class SecurityManagerClass extends Class { /** A class involving file input or output. */ class FileInputOutputClass extends Class { FileInputOutputClass() { - this.hasQualifiedName("java.io", "File") or + this instanceof TypeFile or this.hasQualifiedName("java.io", "FileDescriptor") or this.hasQualifiedName("java.io", "FileInputStream") or this.hasQualifiedName("java.io", "FileOutputStream") or diff --git a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll index 5ee8f25724e..27ada4d6ff0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll @@ -15,6 +15,7 @@ class StrutsAnnotation extends Annotation { class StrutsActionAnnotation extends StrutsAnnotation { StrutsActionAnnotation() { this.getType().hasName("Action") } + /** Gets a callable annotated with this annotation. */ Callable getActionCallable() { result = this.getAnnotatedElement() or diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll new file mode 100644 index 00000000000..0a1f306677f --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll @@ -0,0 +1,131 @@ +/** Provides classes and predicates to reason about cleartext storage in Android databases. */ + +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.frameworks.android.ContentProviders +import semmle.code.java.frameworks.android.Intent +import semmle.code.java.frameworks.android.SQLite +import semmle.code.java.security.CleartextStorageQuery + +private class LocalDatabaseCleartextStorageSink extends CleartextStorageSink { + LocalDatabaseCleartextStorageSink() { localDatabaseInput(_, this.asExpr()) } +} + +private class LocalDatabaseCleartextStorageStep extends CleartextStorageAdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + // EditText.getText() return type is parsed as `Object`, so we need to + // add a taint step for `Object.toString` to model `editText.getText().toString()` + exists(MethodAccess ma, Method m | + ma.getMethod() = m and + m.getDeclaringType() instanceof TypeObject and + m.hasName("toString") + | + n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma + ) + } +} + +/** The creation of an object that can be used to store data in a local database. */ +class LocalDatabaseOpenMethodAccess extends Storable, Call { + LocalDatabaseOpenMethodAccess() { + exists(Method m | this.(MethodAccess).getMethod() = m | + m.getDeclaringType().getASupertype*() instanceof TypeSQLiteOpenHelper and + m.hasName("getWritableDatabase") + or + m.getDeclaringType() instanceof TypeSQLiteDatabase and + m.hasName(["create", "openDatabase", "openOrCreateDatabase", "compileStatement"]) + or + m.getDeclaringType().getASupertype*() instanceof TypeContext and + m.hasName("openOrCreateDatabase") + ) + or + this.(ClassInstanceExpr).getConstructedType() instanceof ContentValues + } + + override Expr getAnInput() { + exists(LocalDatabaseFlowConfig config, DataFlow::Node database | + localDatabaseInput(database, result) and + config.hasFlow(DataFlow::exprNode(this), database) + ) + } + + override Expr getAStore() { + exists(LocalDatabaseFlowConfig config, DataFlow::Node database | + localDatabaseStore(database, result) and + config.hasFlow(DataFlow::exprNode(this), database) + ) + } +} + +/** A method that is both a database input and a database store. */ +private class LocalDatabaseInputStoreMethod extends Method { + LocalDatabaseInputStoreMethod() { + this.getDeclaringType() instanceof TypeSQLiteDatabase and + this.getName().matches("exec%SQL") + } +} + +/** + * Holds if `input` is a value being prepared for being stored into the SQLite dataabse `database`. + * This can be done using prepared statements, using the class `ContentValues`, or directly + * appending `input` to a SQL query. + */ +private predicate localDatabaseInput(DataFlow::Node database, Argument input) { + exists(Method m | input.getCall().getCallee() = m | + m instanceof LocalDatabaseInputStoreMethod and + database.asExpr() = input.getCall().getQualifier() + or + m.getDeclaringType() instanceof TypeSQLiteDatabase and + m.hasName("compileStatement") and + database.asExpr() = input.getCall() + or + m.getDeclaringType() instanceof ContentValues and + m.hasName("put") and + input.getPosition() = 1 and + database.asExpr() = input.getCall().getQualifier() + ) +} + +/** + * Holds if `store` is a method call for storing a previously appended input value, + * either through the use of prepared statements, via the `ContentValues` class, or + * directly executing a raw SQL query. + */ +private predicate localDatabaseStore(DataFlow::Node database, MethodAccess store) { + exists(Method m | store.getMethod() = m | + m instanceof LocalDatabaseInputStoreMethod and + database.asExpr() = store.getQualifier() + or + m.getDeclaringType() instanceof TypeSQLiteDatabase and + m.getName().matches(["insert%", "replace%", "update%"]) and + database.asExpr() = store.getAnArgument() and + database.getType() instanceof ContentValues + or + m.getDeclaringType() instanceof TypeSQLiteStatement and + m.hasName(["executeInsert", "executeUpdateDelete"]) and + database.asExpr() = store.getQualifier() + ) +} + +private class LocalDatabaseFlowConfig extends DataFlow::Configuration { + LocalDatabaseFlowConfig() { this = "LocalDatabaseFlowConfig" } + + override predicate isSource(DataFlow::Node source) { + source.asExpr() instanceof LocalDatabaseOpenMethodAccess + } + + override predicate isSink(DataFlow::Node sink) { + localDatabaseInput(sink, _) or + localDatabaseStore(sink, _) + } + + override predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) { + // Adds a step for tracking databases through field flow, that is, a database is opened and + // assigned to a field, and then an input or store method is called on that field elsewhere. + exists(Field f | + f.getType() instanceof TypeSQLiteDatabase and + f.getAnAssignedValue() = n1.asExpr() and + f = n2.asExpr().(FieldRead).getField() + ) + } +} diff --git a/java/ql/lib/semmle/code/java/security/FileWritable.qll b/java/ql/lib/semmle/code/java/security/FileWritable.qll index bd8329647da..09a9e37fb9b 100644 --- a/java/ql/lib/semmle/code/java/security/FileWritable.qll +++ b/java/ql/lib/semmle/code/java/security/FileWritable.qll @@ -67,7 +67,7 @@ private VarAccess getFileForPathConversion(Expr pathExpr) { fileToPath = pathExpr and result = fileToPath.getQualifier() and fileToPath.getMethod().hasName("toPath") and - fileToPath.getMethod().getDeclaringType().hasQualifiedName("java.io", "File") + fileToPath.getMethod().getDeclaringType() instanceof TypeFile ) or // Look for the pattern `Paths.get(file.get*Path())` for converting between a `File` and a `Path`. diff --git a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll index c0c45975d8b..ceaae6fb40e 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll @@ -14,7 +14,11 @@ import java private string suspicious() { - result = ["%password%", "%passwd%", "%account%", "%accnt%", "%trusted%"] + result = + [ + "%password%", "%passwd%", "pwd", "%account%", "%accnt%", "%trusted%", "%refresh%token%", + "%secret%token" + ] } private string nonSuspicious() { diff --git a/java/ql/lib/tutorial.qll b/java/ql/lib/tutorial.qll index 8cb1797a532..190d054d5ac 100644 --- a/java/ql/lib/tutorial.qll +++ b/java/ql/lib/tutorial.qll @@ -6,122 +6,22 @@ */ class Person extends string { Person() { - this = "Ronil" or - this = "Dina" or - this = "Ravi" or - this = "Bruce" or - this = "Jo" or - this = "Aida" or - this = "Esme" or - this = "Charlie" or - this = "Fred" or - this = "Meera" or - this = "Maya" or - this = "Chad" or - this = "Tiana" or - this = "Laura" or - this = "George" or - this = "Will" or - this = "Mary" or - this = "Almira" or - this = "Susannah" or - this = "Rhoda" or - this = "Cynthia" or - this = "Eunice" or - this = "Olive" or - this = "Virginia" or - this = "Angeline" or - this = "Helen" or - this = "Cornelia" or - this = "Harriet" or - this = "Mahala" or - this = "Abby" or - this = "Margaret" or - this = "Deb" or - this = "Minerva" or - this = "Severus" or - this = "Lavina" or - this = "Adeline" or - this = "Cath" or - this = "Elisa" or - this = "Lucretia" or - this = "Anne" or - this = "Eleanor" or - this = "Joanna" or - this = "Adam" or - this = "Agnes" or - this = "Rosanna" or - this = "Clara" or - this = "Melissa" or - this = "Amy" or - this = "Isabel" or - this = "Jemima" or - this = "Cordelia" or - this = "Melinda" or - this = "Delila" or - this = "Jeremiah" or - this = "Elijah" or - this = "Hester" or - this = "Walter" or - this = "Oliver" or - this = "Hugh" or - this = "Aaron" or - this = "Reuben" or - this = "Eli" or - this = "Amos" or - this = "Augustus" or - this = "Theodore" or - this = "Ira" or - this = "Timothy" or - this = "Cyrus" or - this = "Horace" or - this = "Simon" or - this = "Asa" or - this = "Frank" or - this = "Nelson" or - this = "Leonard" or - this = "Harrison" or - this = "Anthony" or - this = "Louis" or - this = "Milton" or - this = "Noah" or - this = "Cornelius" or - this = "Abdul" or - this = "Warren" or - this = "Harvey" or - this = "Dennis" or - this = "Wesley" or - this = "Sylvester" or - this = "Gilbert" or - this = "Sullivan" or - this = "Edmund" or - this = "Wilson" or - this = "Perry" or - this = "Matthew" or - this = "Simba" or - this = "Nala" or - this = "Rafiki" or - this = "Shenzi" or - this = "Ernest" or - this = "Gertrude" or - this = "Oscar" or - this = "Lilian" or - this = "Raymond" or - this = "Elgar" or - this = "Elmer" or - this = "Herbert" or - this = "Maude" or - this = "Mae" or - this = "Otto" or - this = "Edwin" or - this = "Ophelia" or - this = "Parsley" or - this = "Sage" or - this = "Rosemary" or - this = "Thyme" or - this = "Garfunkel" or - this = "King Basil" or - this = "Stephen" + this = + [ + "Ronil", "Dina", "Ravi", "Bruce", "Jo", "Aida", "Esme", "Charlie", "Fred", "Meera", "Maya", + "Chad", "Tiana", "Laura", "George", "Will", "Mary", "Almira", "Susannah", "Rhoda", + "Cynthia", "Eunice", "Olive", "Virginia", "Angeline", "Helen", "Cornelia", "Harriet", + "Mahala", "Abby", "Margaret", "Deb", "Minerva", "Severus", "Lavina", "Adeline", "Cath", + "Elisa", "Lucretia", "Anne", "Eleanor", "Joanna", "Adam", "Agnes", "Rosanna", "Clara", + "Melissa", "Amy", "Isabel", "Jemima", "Cordelia", "Melinda", "Delila", "Jeremiah", "Elijah", + "Hester", "Walter", "Oliver", "Hugh", "Aaron", "Reuben", "Eli", "Amos", "Augustus", + "Theodore", "Ira", "Timothy", "Cyrus", "Horace", "Simon", "Asa", "Frank", "Nelson", + "Leonard", "Harrison", "Anthony", "Louis", "Milton", "Noah", "Cornelius", "Abdul", "Warren", + "Harvey", "Dennis", "Wesley", "Sylvester", "Gilbert", "Sullivan", "Edmund", "Wilson", + "Perry", "Matthew", "Simba", "Nala", "Rafiki", "Shenzi", "Ernest", "Gertrude", "Oscar", + "Lilian", "Raymond", "Elgar", "Elmer", "Herbert", "Maude", "Mae", "Otto", "Edwin", + "Ophelia", "Parsley", "Sage", "Rosemary", "Thyme", "Garfunkel", "King Basil", "Stephen" + ] } /** Gets the hair color of the person. If the person is bald, there is no result. */ @@ -936,25 +836,12 @@ class Person extends string { /** Holds if the person is deceased. */ predicate isDeceased() { - this = "Ernest" or - this = "Gertrude" or - this = "Oscar" or - this = "Lilian" or - this = "Edwin" or - this = "Raymond" or - this = "Elgar" or - this = "Elmer" or - this = "Herbert" or - this = "Maude" or - this = "Mae" or - this = "Otto" or - this = "Ophelia" or - this = "Parsley" or - this = "Sage" or - this = "Rosemary" or - this = "Thyme" or - this = "Garfunkel" or - this = "King Basil" + this = + [ + "Ernest", "Gertrude", "Oscar", "Lilian", "Edwin", "Raymond", "Elgar", "Elmer", "Herbert", + "Maude", "Mae", "Otto", "Ophelia", "Parsley", "Sage", "Rosemary", "Thyme", "Garfunkel", + "King Basil" + ] } /** Gets a parent of the person (alive or deceased). */ @@ -1195,12 +1082,7 @@ class Person extends string { } /** Holds if the person is allowed in the region. Initially, all villagers are allowed in every region. */ - predicate isAllowedIn(string region) { - region = "north" or - region = "south" or - region = "east" or - region = "west" - } + predicate isAllowedIn(string region) { region = ["north", "south", "east", "west"] } } /** Returns a parent of the person. */ diff --git a/java/ql/lib/upgrades/initial/semmlecode.dbscheme b/java/ql/lib/upgrades/initial/semmlecode.dbscheme new file mode 100644 index 00000000000..57bb881e645 --- /dev/null +++ b/java/ql/lib/upgrades/initial/semmlecode.dbscheme @@ -0,0 +1,648 @@ +/* + * External artifacts + */ + +externalDefects( + unique int id : @externalDefect, + varchar(900) queryPath : string ref, + int location : @location ref, + varchar(900) message : string ref, + float severity : float ref +); + +externalMetrics( + unique int id : @externalMetric, + varchar(900) queryPath : string ref, + int location : @location ref, + float value : float ref +); + +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); + +/* + * 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); + +/* + * Version history + */ + +svnentries( + int id : @svnentry, + varchar(500) revision : string ref, + varchar(500) author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + varchar(500) action : string ref +) + +svnentrymsg( + int id : @svnentry ref, + varchar(500) message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int churnedLines : int ref +) + +/* + * Java dbscheme + */ + +@location = @location_default ; + +locations_default(unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref + ); + +hasLocation(int locatableid: @locatable ref, int id: @location ref); + +@sourceline = @locatable ; + +numlines(int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref + ); + +/* + fromSource(0) = unknown, + fromSource(1) = from source, + fromSource(2) = from library +*/ +files(unique int id: @file, + varchar(900) name: string ref, + varchar(900) simple: string ref, + varchar(900) ext: string ref, + int fromSource: int ref); + +folders(unique int id: @folder, + varchar(900) name: string ref, + varchar(900) simple: string ref); + +@container = @folder | @file + +containerparent(int parent: @container ref, + unique int child: @container ref); + +cupackage (unique int id: @file ref, int packageid: @package ref); + +/* Java */ + +packages (unique int id: @package, + varchar(900) nodeName: string ref); + +primitives (unique int id: @primitive, + varchar(20) nodeName: string ref); + +modifiers (unique int id: @modifier, + varchar(20) nodeName: string ref); + +classes (unique int id: @class, + varchar(900) nodeName: string ref, + int parentid: @package ref, + int sourceid: @class ref); + +interfaces (unique int id: @interface, + varchar(900) nodeName: string ref, + int parentid: @package ref, + int sourceid: @interface ref); + +fielddecls (unique int id: @fielddecl, + int parentid: @reftype ref); + +fieldDeclaredIn (int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref); + +fields (unique int id: @field, + varchar(900) nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @field ref); + +constrs (unique int id: @constructor, + varchar(900) nodeName: string ref, + varchar(900) signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref); + +methods (unique int id: @method, + varchar(900) nodeName: string ref, + varchar(900) signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref); + +params (int id: @param, + varchar(900) nodeName: string ref, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref); + +exceptions (unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref); + +isAnnotType (int interfaceid: @interface ref); + +isAnnotElem (int methodid: @method ref); + +// annotValue(annot, id2, value) holds iff +// annot is an application of an annotation @A(v1=n1,...,vk=nk)] +// && id2=vi, value=ni for some i +annotValue (int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref); // unique because source/bytecode expressions are disjoint + +isEnumType (int classid: @class ref); + +isEnumConst (int fieldid: @field ref); + +typeVars (unique int id: @typevariable, + varchar(900) nodeName: string ref, + int pos: int ref, + int kind: int ref, // unused, but kept for backwards compatibility + int parentid: @typeormethod ref); + +wildcards (unique int id: @wildcard, + varchar(900) nodeName: string ref, + int kind: int ref); + +typeBounds (unique int id: @typebound, + int typeid: @reftype ref, // reftype because there are no primitive bounds + int pos: int ref, + int parentid: @boundedtype ref); + +typeArgs (int argumentid: @reftype ref, + int pos: int ref, + int parentid: @typeormethod ref); + +isParameterized(int memberid: @member ref); + +isRaw (int memberid: @member ref); + +erasure (unique int memberid: @member ref, + int erasureid: @member ref); + +isAnonymClass (int classid: @class ref, + int parent: @classinstancexpr ref); + +isLocalClass (int classid: @class ref, + int parent: @localclassdeclstmt ref); + +isDefConstr (int constructorid: @constructor ref); + +arrays (unique int id: @array, + varchar(900) nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref); + +enclInReftype (unique int child: @reftype ref, + int parent: @reftype ref); + +// id1 extends id2 +extendsReftype (int id1: @reftype ref, + int id2: @classorinterface ref); + +implInterface (int id1: @classorarray ref, + int id2: @interface ref); + +hasModifier (int id1: @modifiable ref, + int id2: @modifier ref); + +readsField (unique int id: @readsFieldExpr, + int id1: @callable ref, + int id2: @field ref); + +writesField (unique int id: @writesFieldExpr, + int id1: @callable ref, + int id2: @field ref); + +callsMethod (unique int id: @makesMethodCallExpr, + int id1: @callable ref, + int id2: @method ref, + int kind: int ref); + +callsConstr (unique int id: @makesConstructorCallExpr, + int id1: @callable ref, + int id2: @constructor ref, + int kind: int ref); + +imports (unique int id: @import, + int holder: @typeorpackage ref, + varchar(900) name: string ref, + int kind: int ref); + +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref); + +@stmtparent = @callable | @stmt; + +succs(int fromSuccessor: @stmt ref, + int toSuccessor: @stmtparent ref); + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localclassdeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause; + +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @element ref, // to deal with annotations inside annotations + int idx: int ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @classinstancexpr +| 53 = @conditionalexpr +| 54 = @parexpr +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @typeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @annotation +| 67 = @uniontypeaccess; + + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +@abscaller = @caller | @callExpr ; + +callableBinding (unique int callerid: @caller ref, + int callee: @callable ref); + +@exprparent = @stmt | @expr | @callable | @field | @fielddecl | @class | @interface; + +variableBinding (unique int expr: @varaccess ref, + int variable: @variable ref); + +@variable = @localvar | @param | @field; +@localorparam = @localvar | @param; + +localvars (unique int id: @localvar, + varchar(900) nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref); + +@namedexprorstmt = + @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings (varchar(900) name: string ref, + unique int parent: @namedexprorstmt ref); + +javadoc (unique int id: @javadoc); + +isNormalComment(int commentid : @javadoc ref); + +hasJavadoc (int documentableid: @member ref, + int javadocid: @javadoc ref); + +javadocTag (unique int id: @javadocTag, + varchar(900) name: string ref, + int parentid: @javadocParent ref, + int idx: int ref); + +javadocText (unique int id: @javadocText, + varchar(900) text: string ref, + int parentid: @javadocParent ref, + int idx: int ref); + +@typeorpackage = @type | @package; + +@child = @typeorpackage | @typeormethod | @callable; + +@modifiable_or_locatable = @modifiable | @locatable_element; + +@named_element = @commentable | @modifier_named; + +@typeormethod = @type | @method; +@classorinterface = @interface | @class; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype; +@classorarray = @class | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; +@element = @file | @package | @primitive | @class | @interface | @method | @constructor | @modifier | @param | @exception | @field | + @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl; + +@modifiable = @member_modifiable| @param | @localvar ; + +@commentable = @package | @modifiable | @locatable_element ; + +@package_member = @file | @param | @member ; + +@member_modifiable = @class | @interface | @method | @constructor | @field ; + +@expression = @callExpr | @fieldAccessExpr; +@fieldAccessExpr = @readsFieldExpr | @writesFieldExpr; +@callExpr = @makesMethodCallExpr | @makesConstructorCallExpr; + +@member = @method | @constructor | @field | @reftype ; + +@locatable = @file | @class | @interface | @fielddecl | @field | @constructor | @method | @param | @exception + | @boundedtype | @typebound | @array + | @readsFieldExpr | @writesFieldExpr | @makesMethodCallExpr | @makesConstructorCallExpr + | @import | @stmt | @expr | @localvar | @javadoc | @javadocTag | @javadocText + | @xmllocatable | @externalDefect | @externalMetric; + +@locatable_element = @file | @class | @interface | @field | @param | @exception | @callable + +@named = @param | @member | @package | @typeormethod | @file; + +@modifier_named = @modifier | @modifiable | @named; + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +/* XML Files */ + +xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref); + +xmlDTDs (unique int id: @xmldtd, + varchar(900) root: string ref, + varchar(900) publicId: string ref, + varchar(900) systemId: string ref, + int fileid: @file ref); + +xmlElements (unique int id: @xmlelement, + varchar(900) name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs (unique int id: @xmlattribute, + int elementid: @xmlelement ref, + varchar(900) name: string ref, + varchar(3600) value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs (int id: @xmlnamespace, + varchar(900) prefixName: string ref, + varchar(900) 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, + varchar(3600) text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars (unique int id: @xmlcharacters, + varchar(3600) 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; + +@top = @element | @locatable | @folder; + +/* *** Well-Founded Orders *** */ + +/* The type hierarchy order */ +order:typeOrder(3); + +key:extendsReftype.order(id1, id2, typeOrder); +key:implInterface.order(id1, id2, typeOrder); + +/* The AST parent-child order */ + +order:astChildOrder(4); + +key:classes.order(id, parentid, astChildOrder); // Transitive +key:interfaces.order(id, parentid, astChildOrder); // Transitive +key:fields.order(id, parentid, astChildOrder); +key:methods.order(id, parentid, astChildOrder); +key:constrs.order(id, parentid, astChildOrder); +key:params.order(id, parentid, astChildOrder); +key:exceptions.order(id, parentid, astChildOrder); +key:typeVars.order(id, parentid, astChildOrder); +key:typeBounds.order(id, parentid, astChildOrder); +key:stmts.order(id,parent,astChildOrder); +key:stmts.order(id,bodydecl,astChildOrder); +key:exprs.order(id,parent,astChildOrder); +key:localvars.order(id,parentid,astChildOrder); + +/* Calls and field accesses */ + +key:readsField.order(id, id1, astChildOrder); +key:writesField.order(id, id1, astChildOrder); +key:callsMethod.order(id, id1, astChildOrder); +key:callsConstr.order(id, id1, astChildOrder); + +/* Binary Relations */ + +key:enclInReftype.order(child, parent, astChildOrder); + diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index f93a0d457dc..e769bcddb4f 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,32 @@ +## 0.0.9 + +### New Queries + +* A new query "Cleartext storage of sensitive information using a local database on Android" (`java/android/cleartext-storage-database`) has been added. This query finds instances of sensitive data being stored in local databases without encryption, which may expose it to attackers or malicious applications. + +## 0.0.8 + +### New Queries + +* A new query "Use of implicit PendingIntents" (`java/android/pending-intents`) has been added. +This query finds implicit and mutable `PendingIntents` sent to an unspecified third party +component, which may provide an attacker with access to internal components of the application +or cause other unintended effects. +* Two new queries, "Android fragment injection" (`java/android/fragment-injection`) and "Android fragment injection in PreferenceActivity" (`java/android/fragment-injection-preference-activity`) have been added. +These queries find exported Android activities that instantiate and host fragments created from user-provided data. Such activities are vulnerable to access control bypass and expose the Android application to unintended effects. +* The query "`TrustManager` that accepts all certificates" (`java/insecure-trustmanager`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @intrigus-lgtm](https://github.com/github/codeql/pull/4879). +* The query "Log Injection" (`java/log-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. The query was originally [submitted as an experimental query by @porcupineyhairs and @dellalibera](https://github.com/github/codeql/pull/5099). +* A new query "Intent URI permission manipulation" (`java/android/intent-uri-permission-manipulation`) has been added. +This query finds Android components that return unmodified, received Intents to the calling applications, which +can provide unintended access to internal content providers of the victim application. +* A new query "Cleartext storage of sensitive information in the Android filesystem" (`java/android/cleartext-storage-filesystem`) has been added. This query finds instances of sensitive data being stored in local files without encryption, which may expose it to attackers or malicious applications. +* The query "Cleartext storage of sensitive information using `SharedPreferences` on Android" (`java/android/cleartext-storage-shared-prefs`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/4675). +* The query "Unsafe certificate trust" (`java/unsafe-cert-trust`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3550). + +### Query Metadata Changes + +* The "Random used only once" (`java/random-used-once`) query no longer has a `security-severity` score. This has been causing some tools to categorise it as a security query, when it is more useful as a code-quality query. + ## 0.0.7 ## 0.0.6 diff --git a/java/ql/src/Diagnostics/CoverageDiagnostics.ql b/java/ql/src/Metrics/Summaries/FrameworkCoverage.ql similarity index 61% rename from java/ql/src/Diagnostics/CoverageDiagnostics.ql rename to java/ql/src/Metrics/Summaries/FrameworkCoverage.ql index 0623eefb9eb..23fe38b036d 100644 --- a/java/ql/src/Diagnostics/CoverageDiagnostics.ql +++ b/java/ql/src/Metrics/Summaries/FrameworkCoverage.ql @@ -1,8 +1,9 @@ /** - * @name Diagnostics for framework coverage - * @description Expose diagnostics for the number of API endpoints covered by CSV models. - * @kind diagnostic - * @id java/diagnostics/framework-coverage + * @id java/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 java diff --git a/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java b/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java new file mode 100644 index 00000000000..64a389e3ea6 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java @@ -0,0 +1,13 @@ +public class NettyRequestSplitting { + // BAD: Disables the internal response splitting verification + private final DefaultHttpHeaders badHeaders = new DefaultHttpHeaders(false); + + // GOOD: Verifies headers passed don't contain CRLF characters + private final DefaultHttpHeaders goodHeaders = new DefaultHttpHeaders(); + + // BAD: Disables the internal response splitting verification + private final DefaultHttpRequest badRequest = new DefaultHttpRequest(httpVersion, method, uri, false); + + // GOOD: Verifies headers passed don't contain CRLF characters + private final DefaultHttpRequest goodResponse = new DefaultHttpRequest(httpVersion, method, uri); +} diff --git a/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql b/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql index 350358b69c1..35b85788221 100644 --- a/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql +++ b/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql @@ -7,35 +7,82 @@ * @problem.severity error * @security-severity 6.1 * @precision high - * @id java/netty-http-response-splitting + * @id java/netty-http-request-or-response-splitting * @tags security + * external/cwe/cwe-93 * external/cwe/cwe-113 */ import java +import semmle.code.java.dataflow.FlowSources -abstract private class InsecureNettyObjectCreation extends ClassInstanceExpr { } +abstract private class InsecureNettyObjectCreation extends ClassInstanceExpr { + int vulnerableArgumentIndex; -private class InsecureDefaultHttpHeadersClassInstantiation extends InsecureNettyObjectCreation { + InsecureNettyObjectCreation() { + DataFlow::localExprFlow(any(CompileTimeConstantExpr ctce | ctce.getBooleanValue() = false), + this.getArgument(vulnerableArgumentIndex)) + } + + abstract string splittingType(); +} + +abstract private class RequestOrResponseSplittingInsecureNettyObjectCreation extends InsecureNettyObjectCreation { + override string splittingType() { result = "Request splitting or response splitting" } +} + +/** + * Request splitting can allowing an attacker to inject/smuggle an additional HTTP request into the socket connection. + */ +abstract private class RequestSplittingInsecureNettyObjectCreation extends InsecureNettyObjectCreation { + override string splittingType() { result = "Request splitting" } +} + +/** + * Response splitting can lead to HTTP vulnerabilities like XSS and cache poisoning. + */ +abstract private class ResponseSplittingInsecureNettyObjectCreation extends InsecureNettyObjectCreation { + override string splittingType() { result = "Response splitting" } +} + +private class InsecureDefaultHttpHeadersClassInstantiation extends RequestOrResponseSplittingInsecureNettyObjectCreation { InsecureDefaultHttpHeadersClassInstantiation() { - getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpHeaders") and - getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = false + this.getConstructedType() + .hasQualifiedName("io.netty.handler.codec.http", + ["DefaultHttpHeaders", "CombinedHttpHeaders"]) and + vulnerableArgumentIndex = 0 } } -private class InsecureDefaultHttpResponseClassInstantiation extends InsecureNettyObjectCreation { +private class InsecureDefaultHttpResponseClassInstantiation extends ResponseSplittingInsecureNettyObjectCreation { InsecureDefaultHttpResponseClassInstantiation() { - getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpResponse") and - getArgument(2).(CompileTimeConstantExpr).getBooleanValue() = false + this.getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpResponse") and + vulnerableArgumentIndex = 2 } } -private class InsecureDefaultFullHttpResponseClassInstantiation extends InsecureNettyObjectCreation { +private class InsecureDefaultHttpRequestClassInstantiation extends RequestSplittingInsecureNettyObjectCreation { + InsecureDefaultHttpRequestClassInstantiation() { + this.getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultHttpRequest") and + vulnerableArgumentIndex = 3 + } +} + +private class InsecureDefaultFullHttpResponseClassInstantiation extends ResponseSplittingInsecureNettyObjectCreation { InsecureDefaultFullHttpResponseClassInstantiation() { - getConstructedType().hasQualifiedName("io.netty.handler.codec.http", "DefaultFullHttpResponse") and - getArgument(3).(CompileTimeConstantExpr).getBooleanValue() = false + this.getConstructedType() + .hasQualifiedName("io.netty.handler.codec.http", "DefaultFullHttpResponse") and + vulnerableArgumentIndex = [2, 3] + } +} + +private class InsecureDefaultFullHttpRequestClassInstantiation extends RequestSplittingInsecureNettyObjectCreation { + InsecureDefaultFullHttpRequestClassInstantiation() { + this.getConstructedType() + .hasQualifiedName("io.netty.handler.codec.http", "DefaultFullHttpRequest") and + vulnerableArgumentIndex = [3, 4] } } from InsecureNettyObjectCreation new -select new, "Response-splitting vulnerability due to header value verification being disabled." +select new, new.splittingType() + " vulnerability due to header value verification being disabled." diff --git a/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.qhelp b/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.qhelp index aafdc26e49c..bb70531f59c 100644 --- a/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.qhelp +++ b/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.qhelp @@ -5,16 +5,24 @@

Directly writing user input (for example, an HTTP request parameter) to an HTTP header -can lead to an HTTP response-splitting vulnerability. -If the user input includes blank lines in it, and if the servlet container does not itself -escape the blank lines, then a remote user can cause the response to turn into two separate -responses, one of which is controlled by the remote user.

+can lead to an HTTP request-splitting or response-splitting vulnerability.

+ +

HTTP response splitting can lead to vulnerabilities such as XSS and cache poisoning.

+

HTTP request splitting can allow an attacker to inject an additional HTTP request into a client's outgoing socket connection. +This can allow an attacker to perform an SSRF-like attack.

+ +

In the context of a servlet container, if the user input includes blank lines +and the servlet container does not escape the blank lines, +then a remote user can cause the response to turn into two separate responses. +The remote user can then control one or more responses, which is also HTTP response splitting.

Guard against HTTP header splitting in the same way as guarding against cross-site scripting. Before passing any data into HTTP headers, either check the data for special characters, or escape any special characters that are present.

+ +

If the code calls Netty API's directly, ensure that the validateHeaders parameter is set to true.

@@ -33,6 +41,13 @@ The second way will verify the parameters before using them to build the HTTP re + +

The following example shows the use of the netty library with configurations for verification of HTTP request splitting. +The second recommended approach in the example verifies the parameters before using them to build the HTTP request.

+ + +
+
  • InfosecWriters: HTTP response splitting. @@ -44,5 +59,8 @@ OWASP:
  • Wikipedia: HTTP response splitting.
  • +
  • +CAPEC: CAPEC-105: HTTP Request Splitting +
  • diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.qhelp b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.qhelp new file mode 100644 index 00000000000..e3bf61107c4 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.qhelp @@ -0,0 +1,49 @@ + + + +

    Local information disclosure can occur when files/directories are written into +directories that are shared between all users on the system.

    + +

    On most unix-like systems, +the system temporary directory is shared between local users. +If files/directories are created within the system temporary directory without using +APIs that explicitly set the correct file permissions, local information disclosure +can occur.

    + +

    Depending upon the particular file contents exposed, this vulnerability can have a +CVSSv3.1 base score of 6.2/10.

    +
    + + +

    Use JDK methods that specifically protect against this vulnerability:

    + + +

    Otherwise, create the file/directory by manually specifying the expected posix file permissions. +For example: PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))

    + +
    + + +

    In the following example, files and directories are created with file permissions that allow other local users to read their contents.

    + + + +

    In the following example, files and directories are created with file permissions that protect their contents.

    + + +
    + + +
  • OSWAP: Insecure Temporary File.
  • +
  • CERT: FIO00-J. Do not operate on files in shared directories.
  • +
    +
    \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql new file mode 100644 index 00000000000..a3faddf6ab7 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql @@ -0,0 +1,258 @@ +/** + * @name Local information disclosure in a temporary directory + * @description Writing information without explicit permissions to a shared temporary directory may disclose it to other users. + * @kind path-problem + * @problem.severity warning + * @precision medium + * @id java/local-temp-file-or-directory-information-disclosure + * @tags security + * external/cwe/cwe-200 + * external/cwe/cwe-732 + */ + +import java +import TempDirUtils +import DataFlow::PathGraph +import semmle.code.java.dataflow.TaintTracking2 + +abstract private class MethodFileSystemFileCreation extends Method { + MethodFileSystemFileCreation() { this.getDeclaringType() instanceof TypeFile } +} + +private class MethodFileDirectoryCreation extends MethodFileSystemFileCreation { + MethodFileDirectoryCreation() { this.hasName(["mkdir", "mkdirs"]) } +} + +private class MethodFileFileCreation extends MethodFileSystemFileCreation { + MethodFileFileCreation() { this.hasName("createNewFile") } +} + +abstract private class FileCreationSink extends DataFlow::Node { } + +/** + * The qualifier of a call to one of `File`'s file-creating or directory-creating methods, + * treated as a sink by `TempDirSystemGetPropertyToCreateConfig`. + */ +private class FileFileCreationSink extends FileCreationSink { + FileFileCreationSink() { + exists(MethodAccess ma | + ma.getMethod() instanceof MethodFileSystemFileCreation and + ma.getQualifier() = this.asExpr() + ) + } +} + +/** + * The argument to a call to one of `Files` file-creating or directory-creating methods, + * treated as a sink by `TempDirSystemGetPropertyToCreateConfig`. + */ +private class FilesFileCreationSink extends FileCreationSink { + FilesFileCreationSink() { + exists(FilesVulnerableCreationMethodAccess ma | ma.getArgument(0) = this.asExpr()) + } +} + +/** + * A call to a `Files` method that create files/directories without explicitly + * setting the newly-created file or directory's permissions. + */ +private class FilesVulnerableCreationMethodAccess extends MethodAccess { + FilesVulnerableCreationMethodAccess() { + exists(Method m | + m = this.getMethod() and + m.getDeclaringType().hasQualifiedName("java.nio.file", "Files") + | + m.hasName(["write", "newBufferedWriter", "newOutputStream"]) + or + m.hasName(["createFile", "createDirectory", "createDirectories"]) and + this.getNumArgument() = 1 + or + m.hasName("newByteChannel") and + this.getNumArgument() = 2 + ) + } +} + +/** + * A call to a `File` method that create files/directories with a specific set of permissions explicitly set. + * We can safely assume that any calls to these methods with explicit `PosixFilePermissions.asFileAttribute` + * contains a certain level of intentionality behind it. + */ +private class FilesSanitizingCreationMethodAccess extends MethodAccess { + FilesSanitizingCreationMethodAccess() { + exists(Method m | + m = this.getMethod() and + m.getDeclaringType().hasQualifiedName("java.nio.file", "Files") + | + m.hasName(["createFile", "createDirectory", "createDirectories"]) and + this.getNumArgument() = 2 + ) + } +} + +/** + * The temp directory argument to a call to `java.io.File::createTempFile`, + * treated as a sink by `TempDirSystemGetPropertyToCreateConfig`. + */ +private class FileCreateTempFileSink extends FileCreationSink { + FileCreateTempFileSink() { + exists(MethodAccess ma | + ma.getMethod() instanceof MethodFileCreateTempFile and ma.getArgument(2) = this.asExpr() + ) + } +} + +private class TempDirSystemGetPropertyToCreateConfig extends TaintTracking::Configuration { + TempDirSystemGetPropertyToCreateConfig() { this = "TempDirSystemGetPropertyToCreateConfig" } + + override predicate isSource(DataFlow::Node source) { + source.asExpr() instanceof MethodAccessSystemGetPropertyTempDirTainted + } + + /** + * Find dataflow from the temp directory system property to the `File` constructor. + * Examples: + * - `new File(System.getProperty("java.io.tmpdir"))` + * - `new File(new File(System.getProperty("java.io.tmpdir")), "/child")` + */ + override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + isAdditionalFileTaintStep(node1, node2) + } + + override predicate isSink(DataFlow::Node sink) { + sink instanceof FileCreationSink and + not any(TempDirSystemGetPropertyDirectlyToMkdirConfig config).hasFlowTo(sink) + } + + override predicate isSanitizer(DataFlow::Node sanitizer) { + exists(FilesSanitizingCreationMethodAccess sanitisingMethodAccess | + sanitizer.asExpr() = sanitisingMethodAccess.getArgument(0) + ) + } +} + +/** + * Configuration that tracks calls to to `mkdir` or `mkdirs` that are are directly on the temp directory system property. + * Examples: + * - `File tempDir = new File(System.getProperty("java.io.tmpdir")); tempDir.mkdir();` + * - `File tempDir = new File(System.getProperty("java.io.tmpdir")); tempDir.mkdirs();` + * + * These are examples of code that is simply verifying that the temp directory exists. + * As such, this code pattern is filtered out as an explicit vulnerability in + * `TempDirSystemGetPropertyToCreateConfig::isSink`. + */ +private class TempDirSystemGetPropertyDirectlyToMkdirConfig extends TaintTracking2::Configuration { + TempDirSystemGetPropertyDirectlyToMkdirConfig() { + this = "TempDirSystemGetPropertyDirectlyToMkdirConfig" + } + + override predicate isSource(DataFlow::Node node) { + exists( + MethodAccessSystemGetPropertyTempDirTainted propertyGetMethodAccess, DataFlow::Node callSite + | + DataFlow::localFlow(DataFlow::exprNode(propertyGetMethodAccess), callSite) + | + isFileConstructorArgument(callSite.asExpr(), node.asExpr(), 1) + ) + } + + override predicate isSink(DataFlow::Node node) { + exists(MethodAccess ma | ma.getMethod() instanceof MethodFileDirectoryCreation | + ma.getQualifier() = node.asExpr() + ) + } + + override predicate isSanitizer(DataFlow::Node sanitizer) { + isFileConstructorArgument(sanitizer.asExpr(), _, _) + } +} + +// +// Begin configuration for tracking single-method calls that are vulnerable. +// +/** + * A `MethodAccess` against a method that creates a temporary file or directory in a shared temporary directory. + */ +abstract class MethodAccessInsecureFileCreation extends MethodAccess { + /** + * Gets the type of entity created (e.g. `file`, `directory`, ...). + */ + abstract string getFileSystemEntityType(); +} + +/** + * An insecure call to `java.io.File.createTempFile`. + */ +class MethodAccessInsecureFileCreateTempFile extends MethodAccessInsecureFileCreation { + MethodAccessInsecureFileCreateTempFile() { + this.getMethod() instanceof MethodFileCreateTempFile and + ( + // `File.createTempFile(string, string)` always uses the default temporary directory + this.getNumArgument() = 2 + or + // The default temporary directory is used when the last argument of `File.createTempFile(string, string, File)` is `null` + DataFlow::localExprFlow(any(NullLiteral n), this.getArgument(2)) + ) + } + + override string getFileSystemEntityType() { result = "file" } +} + +/** + * The `com.google.common.io.Files.createTempDir` method. + */ +class MethodGuavaFilesCreateTempFile extends Method { + MethodGuavaFilesCreateTempFile() { + this.getDeclaringType().hasQualifiedName("com.google.common.io", "Files") and + this.hasName("createTempDir") + } +} + +/** + * A call to the `com.google.common.io.Files.createTempDir` method. + */ +class MethodAccessInsecureGuavaFilesCreateTempFile extends MethodAccessInsecureFileCreation { + MethodAccessInsecureGuavaFilesCreateTempFile() { + this.getMethod() instanceof MethodGuavaFilesCreateTempFile + } + + override string getFileSystemEntityType() { result = "directory" } +} + +/** + * A hack: we include use of inherently insecure methods, which don't have any associated + * flow path, in with results describing a path from reading `java.io.tmpdir` or similar to use + * in a file creation op. + * + * We achieve this by making inherently-insecure method invocations both a source and a sink in + * this configuration, resulting in a zero-length path which is type-compatible with the actual + * path-flow results. + */ +class InsecureMethodPseudoConfiguration extends DataFlow::Configuration { + InsecureMethodPseudoConfiguration() { this = "InsecureMethodPseudoConfiguration" } + + override predicate isSource(DataFlow::Node node) { + node.asExpr() instanceof MethodAccessInsecureFileCreation + } + + override predicate isSink(DataFlow::Node node) { + node.asExpr() instanceof MethodAccessInsecureFileCreation + } +} + +from DataFlow::PathNode source, DataFlow::PathNode sink, string message +where + ( + any(TempDirSystemGetPropertyToCreateConfig conf).hasFlowPath(source, sink) and + message = + "Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users." + or + any(InsecureMethodPseudoConfiguration conf).hasFlowPath(source, sink) and + // Note this message has no "$@" placeholder, so the "system temp directory" template parameter below is not used. + message = + "Local information disclosure vulnerability due to use of " + + source.getNode().asExpr().(MethodAccessInsecureFileCreation).getFileSystemEntityType() + + " readable by other local users." + ) and + not isPermissionsProtectedTempDirUse(sink.getNode()) +select source.getNode(), source, sink, message, source.getNode(), "system temp directory" diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirUsageSafe.java b/java/ql/src/Security/CWE/CWE-200/TempDirUsageSafe.java new file mode 100644 index 00000000000..f44ead7accb --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/TempDirUsageSafe.java @@ -0,0 +1,100 @@ +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.EnumSet; + +public class TempDirUsageSafe { + void exampleSafe() throws IOException { + Path temp1 = Files.createTempFile("random", ".txt"); // GOOD: File has permissions `-rw-------` + + Path temp2 = Files.createTempDirectory("random-directory"); // GOOD: File has permissions `drwx------` + + // Creating a temporary file with a non-randomly generated name + File tempChildFile = new File(System.getProperty("java.io.tmpdir"), "/child-create-file.txt"); + // Warning: This will fail on windows as it doesn't support PosixFilePermissions. + // See `exampleSafeWithWindowsSupportFile` if your code needs to support windows and unix-like systems. + Files.createFile( + tempChildFile.toPath(), + PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)) + ); // GOOD: Good has permissions `-rw-------` + } + + /* + * An example of a safe use of createFile or createDirectory if your code must support windows and unix-like systems. + */ + void exampleSafeWithWindowsSupportFile() { + // Creating a temporary file with a non-randomly generated name + File tempChildFile = new File(System.getProperty("java.io.tmpdir"), "/child-create-file.txt"); + createTempFile(tempChildFile.toPath()); // GOOD: Good has permissions `-rw-------` + } + + static void createTempFile(Path tempDir) { + try { + if (tempDirChild.getFileSystem().supportedFileAttributeViews().contains("posix")) { + // Explicit permissions setting is only required on unix-like systems because + // the temporary directory is shared between all users. + // This is not necessary on Windows, each user has their own temp directory + final EnumSet posixFilePermissions = + EnumSet.of( + PosixFilePermission.OWNER_READ, + PosixFilePermission.OWNER_WRITE + ); + if (!Files.exists(tempDirChild)) { + Files.createFile( + tempDirChild, + PosixFilePermissions.asFileAttribute(posixFilePermissions) + ); // GOOD: Directory has permissions `-rw-------` + } else { + Files.setPosixFilePermissions( + tempDirChild, + posixFilePermissions + ); // GOOD: Good has permissions `-rw-------`, or will throw an exception if this fails + } + } else if (!Files.exists(tempDirChild)) { + // On Windows, we still need to create the directory, when it doesn't already exist. + Files.createDirectory(tempDirChild); // GOOD: Windows doesn't share the temp directory between users + } + } catch (IOException exception) { + throw new UncheckedIOException("Failed to create temp file", exception); + } + } + + void exampleSafeWithWindowsSupportDirectory() { + File tempDirChildDir = new File(System.getProperty("java.io.tmpdir"), "/child-dir"); + createTempDirectories(tempDirChildDir.toPath()); // GOOD: Directory has permissions `drwx------` + } + + static void createTempDirectories(Path tempDirChild) { + try { + if (tempDirChild.getFileSystem().supportedFileAttributeViews().contains("posix")) { + // Explicit permissions setting is only required on unix-like systems because + // the temporary directory is shared between all users. + // This is not necessary on Windows, each user has their own temp directory + final EnumSet posixFilePermissions = + EnumSet.of( + PosixFilePermission.OWNER_READ, + PosixFilePermission.OWNER_WRITE, + PosixFilePermission.OWNER_EXECUTE + ); + if (!Files.exists(tempDirChild)) { + Files.createDirectories( + tempDirChild, + PosixFilePermissions.asFileAttribute(posixFilePermissions) + ); // GOOD: Directory has permissions `drwx------` + } else { + Files.setPosixFilePermissions( + tempDirChild, + posixFilePermissions + ); // GOOD: Good has permissions `drwx------`, or will throw an exception if this fails + } + } else if (!Files.exists(tempDirChild)) { + // On Windows, we still need to create the directory, when it doesn't already exist. + Files.createDirectories(tempDirChild); // GOOD: Windows doesn't share the temp directory between users + } + } catch (IOException exception) { + throw new UncheckedIOException("Failed to create temp dir", exception); + } + } +} diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirUsageVulnerable.java b/java/ql/src/Security/CWE/CWE-200/TempDirUsageVulnerable.java new file mode 100644 index 00000000000..7d1d212409e --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/TempDirUsageVulnerable.java @@ -0,0 +1,23 @@ +import java.io.File; + +public class TempDirUsageVulnerable { + void exampleVulnerable() { + File temp1 = File.createTempFile("random", ".txt"); // BAD: File has permissions `-rw-r--r--` + + File temp2 = File.createTempFile("random", "file", null); // BAD: File has permissions `-rw-r--r--` + + File systemTempDir = new File(System.getProperty("java.io.tmpdir")); + File temp3 = File.createTempFile("random", "file", systemTempDir); // BAD: File has permissions `-rw-r--r--` + + File tempDir = com.google.common.io.Files.createTempDir(); // BAD: CVE-2020-8908: Directory has permissions `drwxr-xr-x` + + new File(System.getProperty("java.io.tmpdir"), "/child").mkdir(); // BAD: Directory has permissions `-rw-r--r--` + + File tempDirChildFile = new File(System.getProperty("java.io.tmpdir"), "/child-create-file.txt"); + Files.createFile(tempDirChildFile.toPath()); // BAD: File has permissions `-rw-r--r--` + + File tempDirChildDir = new File(System.getProperty("java.io.tmpdir"), "/child-dir"); + tempDirChildDir.mkdir(); // BAD: Directory has permissions `drwxr-xr-x` + Files.createDirectory(tempDirChildDir.toPath()); // BAD: Directory has permissions `drwxr-xr-x` + } +} diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll b/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll new file mode 100644 index 00000000000..d2a2bcb5a6f --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll @@ -0,0 +1,130 @@ +/** + * Provides classes and predicates for reasoning about temporary file/directory creations. + */ + +import java +import semmle.code.java.dataflow.FlowSources + +/** + * A method that returns a `String` or `File` that has been tainted by `System.getProperty("java.io.tmpdir")`. + */ +abstract class MethodAccessSystemGetPropertyTempDirTainted extends MethodAccess { } + +/** + * Method access `System.getProperty("java.io.tmpdir")`. + */ +private class MethodAccessSystemGetPropertyTempDir extends MethodAccessSystemGetPropertyTempDirTainted, + MethodAccessSystemGetProperty { + MethodAccessSystemGetPropertyTempDir() { + this.hasCompileTimeConstantGetPropertyName("java.io.tmpdir") + } +} + +/** + * A method call to the `org.apache.commons.io.FileUtils` methods `getTempDirectory` or `getTempDirectoryPath`. + */ +private class MethodAccessApacheFileUtilsTempDir extends MethodAccessSystemGetPropertyTempDirTainted { + MethodAccessApacheFileUtilsTempDir() { + exists(Method m | + m.getDeclaringType().hasQualifiedName("org.apache.commons.io", "FileUtils") and + m.hasName(["getTempDirectory", "getTempDirectoryPath"]) and + this.getMethod() = m + ) + } +} + +/** + * A `java.io.File::createTempFile` method. + */ +class MethodFileCreateTempFile extends Method { + MethodFileCreateTempFile() { + this.getDeclaringType() instanceof TypeFile and + this.hasName("createTempFile") + } +} + +/** + * Holds if `expDest` is some constructor call `new java.io.File(expSource)`, where the specific `File` constructor being used has `paramCount` parameters. + */ +predicate isFileConstructorArgument(Expr expSource, Expr exprDest, int paramCount) { + exists(ConstructorCall construtorCall | + construtorCall.getConstructedType() instanceof TypeFile and + construtorCall.getArgument(0) = expSource and + construtorCall = exprDest and + construtorCall.getConstructor().getNumberOfParameters() = paramCount + ) +} + +/** + * A `File` method where the temporary directory is still part of the root path. + */ +private class TaintFollowingFileMethod extends Method { + TaintFollowingFileMethod() { + this.getDeclaringType() instanceof TypeFile and + this.hasName(["getAbsoluteFile", "getCanonicalFile"]) + } +} + +private predicate isTaintPropagatingFileTransformation(Expr expSource, Expr exprDest) { + exists(MethodAccess fileMethodAccess | + fileMethodAccess.getMethod() instanceof TaintFollowingFileMethod and + fileMethodAccess.getQualifier() = expSource and + fileMethodAccess = exprDest + ) +} + +/** + * Holds if taint should propagate from `node1` to `node2` across some file creation or transformation operation. + * For example, `taintedFile.getCanonicalFile()` is itself tainted. + */ +predicate isAdditionalFileTaintStep(DataFlow::Node node1, DataFlow::Node node2) { + isFileConstructorArgument(node1.asExpr(), node2.asExpr(), _) or + isTaintPropagatingFileTransformation(node1.asExpr(), node2.asExpr()) +} + +/** + * A method call to `java.io.File::setReadable`. + */ +private class FileSetRedableMethodAccess extends MethodAccess { + FileSetRedableMethodAccess() { + exists(Method m | this.getMethod() = m | + m.getDeclaringType() instanceof TypeFile and + m.hasName("setReadable") + ) + } + + predicate isCallWithArguments(boolean arg1, boolean arg2) { + this.isCallWithArgument(0, arg1) and this.isCallToSecondArgumentWithValue(arg2) + } + + private predicate isCallToSecondArgumentWithValue(boolean value) { + this.getMethod().getNumberOfParameters() = 1 and value = true + or + isCallWithArgument(1, value) + } + + private predicate isCallWithArgument(int index, boolean arg) { + DataFlow::localExprFlow(any(CompileTimeConstantExpr e | e.getBooleanValue() = arg), + this.getArgument(index)) + } +} + +/** + * Hold's if temporary directory's use is protected if there is an explicit call to + * `setReadable(false, false)`, then `setRedabale(true, true)`. + */ +predicate isPermissionsProtectedTempDirUse(DataFlow::Node sink) { + exists(FileSetRedableMethodAccess setReadable1, FileSetRedableMethodAccess setReadable2 | + setReadable1.isCallWithArguments(false, false) and + setReadable2.isCallWithArguments(true, true) + | + exists(DataFlow::Node setReadableNode1, DataFlow::Node setReadableNode2 | + setReadableNode1.asExpr() = setReadable1.getQualifier() and + setReadableNode2.asExpr() = setReadable2.getQualifier() + | + DataFlow::localFlow(sink, setReadableNode1) and // Flow from sink to setReadable(false, false) + DataFlow::localFlow(sink, setReadableNode2) and // Flow from sink to setReadable(true, true) + DataFlow::localFlow(setReadableNode1, setReadableNode2) // Flow from setReadable(false, false) to setReadable(true, true) + ) + ) +} diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.java b/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.java new file mode 100644 index 00000000000..0145125448f --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.java @@ -0,0 +1,27 @@ +public void sqliteStorageUnsafe(Context ctx, String name, String password) { + // BAD - sensitive information saved in cleartext. + SQLiteDatabase db = ctx.openOrCreateDatabase("test", Context.MODE_PRIVATE, null); + db.execSQL("INSERT INTO users VALUES (?, ?)", new String[] {name, password}); +} + +public void sqliteStorageSafe(Context ctx, String name, String password) { + // GOOD - sensitive information encrypted with a custom method. + SQLiteDatabase db = ctx.openOrCreateDatabase("test", Context.MODE_PRIVATE, null); + db.execSQL("INSERT INTO users VALUES (?, ?)", new String[] {name, encrypt(password)}); +} + +public void sqlCipherStorageSafe(String name, String password, String databasePassword) { + // GOOD - sensitive information saved using SQLCipher. + net.sqlcipher.database.SQLiteDatabase db = + net.sqlcipher.database.SQLiteDatabase.openOrCreateDatabase("test", databasePassword, null); + db.execSQL("INSERT INTO users VALUES (?, ?)", new String[] {name, password}); +} + +private static String encrypt(String cleartext) { + // Use an encryption or strong hashing algorithm in the real world. + // The example below just returns a SHA-256 hash. + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(cleartext.getBytes(StandardCharsets.UTF_8)); + String encoded = Base64.getEncoder().encodeToString(hash); + return encoded; +} \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.qhelp b/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.qhelp new file mode 100644 index 00000000000..f8e6183f36f --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.qhelp @@ -0,0 +1,36 @@ + + + +

    + SQLite is a lightweight database engine commonly used in Android devices to store data. By itself, SQLite does not offer any encryption mechanism by default and stores all data in cleartext, which introduces a risk if sensitive data like credentials, authentication tokens or personal identifiable information (PII) are directly stored in a SQLite database. The information could be accessed by any process or user in rooted devices, or can be disclosed through chained vulnerabilities, like unexpected access to the private storage through exposed components. +

    +
    + + +

    + Use SQLCipher or similar libraries to add encryption capabilities to SQLite. Alternatively, encrypt sensitive data using cryptographically secure algorithms before storing it in the database. +

    +
    + + +

    + In the first example, sensitive user information is stored in cleartext. +

    + +

    + In the second and third examples, the code encrypts sensitive information before saving it to the database. +

    + +
    + + +
  • + Android Developers: + Work with data more securely +
  • +
  • + SQLCipher: + Android Application Integration +
  • +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.ql b/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.ql new file mode 100644 index 00000000000..df394db8b4c --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-312/CleartextStorageAndroidDatabase.ql @@ -0,0 +1,23 @@ +/** + * @name Cleartext storage of sensitive information using a local database on Android + * @description Cleartext Storage of Sensitive Information using + * a local database on Android allows access for users with root + * privileges or unexpected exposure from chained vulnerabilities. + * @kind problem + * @problem.severity warning + * @precision medium + * @id java/android/cleartext-storage-database + * @tags security + * external/cwe/cwe-312 + */ + +import java +import semmle.code.java.security.CleartextStorageAndroidDatabaseQuery + +from SensitiveSource data, LocalDatabaseOpenMethodAccess s, Expr input, Expr store +where + input = s.getAnInput() and + store = s.getAStore() and + data.flowsTo(input) +select store, "SQLite database $@ containing $@ is stored $@. Data was added $@.", s, s.toString(), + data, "sensitive data", store, "here", input, "here" diff --git a/java/ql/src/Telemetry/ExternalLibraryUsage.ql b/java/ql/src/Telemetry/ExternalLibraryUsage.ql index 09d9af0072b..93052f19d3b 100644 --- a/java/ql/src/Telemetry/ExternalLibraryUsage.ql +++ b/java/ql/src/Telemetry/ExternalLibraryUsage.ql @@ -2,7 +2,7 @@ * @name External libraries * @description A list of external libraries used in the code * @kind metric - * @metricType callable + * @tags summary * @id java/telemetry/external-libs */ diff --git a/java/ql/src/Telemetry/SupportedExternalSinks.ql b/java/ql/src/Telemetry/SupportedExternalSinks.ql index e4d16c124de..f39794a23be 100644 --- a/java/ql/src/Telemetry/SupportedExternalSinks.ql +++ b/java/ql/src/Telemetry/SupportedExternalSinks.ql @@ -1,9 +1,9 @@ /** * @name Supported sinks in external libraries * @description A list of 3rd party APIs detected as sinks. Excludes test and generated code. - * @id java/telemetry/supported-external-api-sinks * @kind metric - * @metricType callable + * @tags summary + * @id java/telemetry/supported-external-api-sinks */ import java diff --git a/java/ql/src/Telemetry/SupportedExternalSources.ql b/java/ql/src/Telemetry/SupportedExternalSources.ql index 731f1a93b54..91d51cd72fa 100644 --- a/java/ql/src/Telemetry/SupportedExternalSources.ql +++ b/java/ql/src/Telemetry/SupportedExternalSources.ql @@ -1,9 +1,9 @@ /** * @name Supported sources in external libraries * @description A list of 3rd party APIs detected as sources. Excludes test and generated code. - * @id java/telemetry/supported-external-api-sources * @kind metric - * @metricType callable + * @tags summary + * @id java/telemetry/supported-external-api-sources */ import java diff --git a/java/ql/src/Telemetry/SupportedExternalTaint.ql b/java/ql/src/Telemetry/SupportedExternalTaint.ql index 4da713e951e..71721923dea 100644 --- a/java/ql/src/Telemetry/SupportedExternalTaint.ql +++ b/java/ql/src/Telemetry/SupportedExternalTaint.ql @@ -1,9 +1,9 @@ /** - * @name Supported sinks in external libraries - * @description A list of 3rd party APIs detected as sinks. Excludes test and generated code. - * @id java/telemetry/supported-external-api-taint + * @name Supported flow steps in external libraries + * @description A list of 3rd party APIs detected as flow steps. Excludes test and generated code. * @kind metric - * @metricType callable + * @tags summary + * @id java/telemetry/supported-external-api-taint */ import java diff --git a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql index cca76491eab..e79e4938438 100644 --- a/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql +++ b/java/ql/src/Telemetry/UnsupportedExternalAPIs.ql @@ -1,9 +1,9 @@ /** * @name Usage of unsupported APIs coming from external libraries * @description A list of 3rd party APIs used in the codebase. Excludes test and generated code. - * @id java/telemetry/unsupported-external-api * @kind metric - * @metricType callable + * @tags summary + * @id java/telemetry/unsupported-external-api */ import java diff --git a/java/ql/src/change-notes/2021-01-02-netty-response-splitting-improve.md b/java/ql/src/change-notes/2021-01-02-netty-response-splitting-improve.md new file mode 100644 index 00000000000..3aba8c9581e --- /dev/null +++ b/java/ql/src/change-notes/2021-01-02-netty-response-splitting-improve.md @@ -0,0 +1,9 @@ +--- +category: breaking +--- +* Add more classes to Netty request/response splitting. Change identification to `java/netty-http-request-or-response-splitting`. + Identify request splitting differently from response splitting in query results. + Support addional classes: + * `io.netty.handler.codec.http.CombinedHttpHeaders` + * `io.netty.handler.codec.http.DefaultHttpRequest` + * `io.netty.handler.codec.http.DefaultFullHttpRequest` diff --git a/java/ql/src/change-notes/2021-06-28-unsafe-cert-trust-query.md b/java/ql/src/change-notes/2021-06-28-unsafe-cert-trust-query.md deleted file mode 100644 index bde0c9d0249..00000000000 --- a/java/ql/src/change-notes/2021-06-28-unsafe-cert-trust-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query "Unsafe certificate trust" (`java/unsafe-cert-trust`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3550). diff --git a/java/ql/src/change-notes/2021-08-10-cleartext-storage-sharedprefs-query.md b/java/ql/src/change-notes/2021-08-10-cleartext-storage-sharedprefs-query.md deleted file mode 100644 index 472b083e7e1..00000000000 --- a/java/ql/src/change-notes/2021-08-10-cleartext-storage-sharedprefs-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query "Cleartext storage of sensitive information using `SharedPreferences` on Android" (`java/android/cleartext-storage-shared-prefs`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/4675). diff --git a/java/ql/src/change-notes/2021-09-01-cleartext-storage-filesystem-query.md b/java/ql/src/change-notes/2021-09-01-cleartext-storage-filesystem-query.md deleted file mode 100644 index 7c60c03ebf4..00000000000 --- a/java/ql/src/change-notes/2021-09-01-cleartext-storage-filesystem-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* A new query "Cleartext storage of sensitive information in the Android filesystem" (`java/android/cleartext-storage-filesystem`) has been added. This query finds instances of sensitive data being stored in local files without encryption, which may expose it to attackers or malicious applications. diff --git a/java/ql/src/change-notes/2021-10-27-android-intent-uri-permission-manipulation-query.md b/java/ql/src/change-notes/2021-10-27-android-intent-uri-permission-manipulation-query.md deleted file mode 100644 index fddecd1b953..00000000000 --- a/java/ql/src/change-notes/2021-10-27-android-intent-uri-permission-manipulation-query.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: newQuery ---- -* A new query "Intent URI permission manipulation" (`java/android/intent-uri-permission-manipulation`) has been added. -This query finds Android components that return unmodified, received Intents to the calling applications, which -can provide unintended access to internal content providers of the victim application. \ No newline at end of file diff --git a/java/ql/src/change-notes/2021-11-04-log-injection-query.md b/java/ql/src/change-notes/2021-11-04-log-injection-query.md deleted file mode 100644 index 6326685c86c..00000000000 --- a/java/ql/src/change-notes/2021-11-04-log-injection-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query "Log Injection" (`java/log-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. The query was originally [submitted as an experimental query by @porcupineyhairs and @dellalibera](https://github.com/github/codeql/pull/5099). \ No newline at end of file diff --git a/java/ql/src/change-notes/2021-11-15-insecure-trustamanger-query.md b/java/ql/src/change-notes/2021-11-15-insecure-trustamanger-query.md deleted file mode 100644 index 7789ebe3c25..00000000000 --- a/java/ql/src/change-notes/2021-11-15-insecure-trustamanger-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query "`TrustManager` that accepts all certificates" (`java/insecure-trustmanager`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @intrigus-lgtm](https://github.com/github/codeql/pull/4879). diff --git a/java/ql/src/change-notes/2021-12-15-android-fragment-injection-query.md b/java/ql/src/change-notes/2021-12-15-android-fragment-injection-query.md deleted file mode 100644 index 249032b7d22..00000000000 --- a/java/ql/src/change-notes/2021-12-15-android-fragment-injection-query.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: newQuery ---- -* Two new queries, "Android fragment injection" (`java/android/fragment-injection`) and "Android fragment injection in PreferenceActivity" (`java/android/fragment-injection-preference-activity`) have been added. -These queries find exported Android activities that instantiate and host fragments created from user-provided data. Such activities are vulnerable to access control bypass and expose the Android application to unintended effects. \ No newline at end of file diff --git a/java/ql/src/change-notes/2021-12-21-android-implicit-pendingintents.md b/java/ql/src/change-notes/2021-12-21-android-implicit-pendingintents.md deleted file mode 100644 index 8549f3863a6..00000000000 --- a/java/ql/src/change-notes/2021-12-21-android-implicit-pendingintents.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: newQuery ---- -* A new query "Use of implicit PendingIntents" (`java/android/pending-intents`) has been added. -This query finds implicit and mutable `PendingIntents` sent to an unspecified third party -component, which may provide an attacker with access to internal components of the application -or cause other unintended effects. \ No newline at end of file diff --git a/java/ql/src/change-notes/2022-01-19-random-used-once.md b/java/ql/src/change-notes/2022-01-19-random-used-once.md deleted file mode 100644 index f9a00c6528f..00000000000 --- a/java/ql/src/change-notes/2022-01-19-random-used-once.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: queryMetadata ---- -* The "Random used only once" (`java/random-used-once`) query no longer has a `security-severity` score. This has been causing some tools to categorise it as a security query, when it is more useful as a code-quality query. diff --git a/java/ql/src/change-notes/2022-02-04-local-temp-file-or-directory-information-disclosure.md b/java/ql/src/change-notes/2022-02-04-local-temp-file-or-directory-information-disclosure.md new file mode 100644 index 00000000000..23f3a476e79 --- /dev/null +++ b/java/ql/src/change-notes/2022-02-04-local-temp-file-or-directory-information-disclosure.md @@ -0,0 +1,6 @@ +--- +category: newQuery +--- +* A new query titled "Local information disclosure in a temporary directory" (`java/local-temp-file-or-directory-information-disclosure`) has been added. + This query finds uses of APIs that leak potentially sensitive information to other local users via the system temporary directory. + This query was originally [submitted as query by @JLLeitschuh](https://github.com/github/codeql/pull/4388). \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.0.8.md b/java/ql/src/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..a11435f0491 --- /dev/null +++ b/java/ql/src/change-notes/released/0.0.8.md @@ -0,0 +1,22 @@ +## 0.0.8 + +### New Queries + +* A new query "Use of implicit PendingIntents" (`java/android/pending-intents`) has been added. +This query finds implicit and mutable `PendingIntents` sent to an unspecified third party +component, which may provide an attacker with access to internal components of the application +or cause other unintended effects. +* Two new queries, "Android fragment injection" (`java/android/fragment-injection`) and "Android fragment injection in PreferenceActivity" (`java/android/fragment-injection-preference-activity`) have been added. +These queries find exported Android activities that instantiate and host fragments created from user-provided data. Such activities are vulnerable to access control bypass and expose the Android application to unintended effects. +* The query "`TrustManager` that accepts all certificates" (`java/insecure-trustmanager`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @intrigus-lgtm](https://github.com/github/codeql/pull/4879). +* The query "Log Injection" (`java/log-injection`) has been promoted from experimental to the main query pack. Its results will now appear by default. The query was originally [submitted as an experimental query by @porcupineyhairs and @dellalibera](https://github.com/github/codeql/pull/5099). +* A new query "Intent URI permission manipulation" (`java/android/intent-uri-permission-manipulation`) has been added. +This query finds Android components that return unmodified, received Intents to the calling applications, which +can provide unintended access to internal content providers of the victim application. +* A new query "Cleartext storage of sensitive information in the Android filesystem" (`java/android/cleartext-storage-filesystem`) has been added. This query finds instances of sensitive data being stored in local files without encryption, which may expose it to attackers or malicious applications. +* The query "Cleartext storage of sensitive information using `SharedPreferences` on Android" (`java/android/cleartext-storage-shared-prefs`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/4675). +* The query "Unsafe certificate trust" (`java/unsafe-cert-trust`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @luchua-bc](https://github.com/github/codeql/pull/3550). + +### Query Metadata Changes + +* The "Random used only once" (`java/random-used-once`) query no longer has a `security-severity` score. This has been causing some tools to categorise it as a security query, when it is more useful as a code-quality query. diff --git a/java/ql/src/change-notes/released/0.0.9.md b/java/ql/src/change-notes/released/0.0.9.md new file mode 100644 index 00000000000..59aed7a4290 --- /dev/null +++ b/java/ql/src/change-notes/released/0.0.9.md @@ -0,0 +1,5 @@ +## 0.0.9 + +### New Queries + +* A new query "Cleartext storage of sensitive information using a local database on Android" (`java/android/cleartext-storage-database`) has been added. This query finds instances of sensitive data being stored in local databases without encryption, which may expose it to attackers or malicious applications. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index a2a5484910b..ecdd64fbab8 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.9 diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.java b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.java new file mode 100644 index 00000000000..6bee08e2f3a --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.java @@ -0,0 +1,21 @@ +// BAD: no file download validation +HttpServletRequest request = getRequest(); +String path = request.getParameter("path"); +String filePath = "/pages/" + path; +HttpServletResponse resp = getResponse(); +File file = new File(filePath); +resp.getOutputStream().write(file.readContent()); + +// BAD: no file upload validation +String savePath = getPara("dir"); +File file = getFile("fileParam").getFile(); +FileInputStream fis = new FileInputStream(file); +String filePath = "/files/" + savePath; +FileOutputStream fos = new FileOutputStream(filePath); + +// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: +// (alternatively use `Path.normalize` instead of checking for `..`) +if (!filePath.contains("..") && filePath.hasPrefix("/pages")) { ... } +// Also GOOD: check for a forbidden prefix, ensuring URL-encoding is not used to evade the check: +// (alternatively use `URLDecoder.decode` before `hasPrefix`) +if (filePath.hasPrefix("/files") && !filePath.contains("%")) { ... } \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.qhelp b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.qhelp new file mode 100644 index 00000000000..0797fb366ff --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.qhelp @@ -0,0 +1,39 @@ + + + + + +

    External Control of File Name or Path, also called File Path Injection, is a vulnerability by which +a file path is created using data from outside the application (such as the HTTP request). It allows +an attacker to traverse through the filesystem and access arbitrary files.

    +
    + + +

    Unsanitized user-provided data must not be used to construct file paths. In order to prevent File +Path Injection, it is recommended to avoid concatenating user input directly into the file path. Instead, +user input should be checked against allowed or disallowed paths (for example, the path must be within +/user_content/ or must not be within /internal), ensuring that neither path +traversal using ../ nor URL encoding is used to evade these checks. +

    +
    + + +

    The following examples show the bad case and the good case respectively. +The BAD methods show an HTTP request parameter being used directly to construct a file path +without validating the input, which may cause file leakage. In the GOOD method, the file path +is validated. +

    + +
    + + +
  • OWASP: + Path Traversal. +
  • +
  • Veracode: + External Control of File Name or Path Flaw. +
  • +
    +
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql new file mode 100644 index 00000000000..bf4f1ec33bb --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql @@ -0,0 +1,43 @@ +/** + * @name File Path Injection + * @description Loading files based on unvalidated user-input may cause file information disclosure + * and uploading files with unvalidated file types to an arbitrary directory may lead to + * Remote Command Execution (RCE). + * @kind path-problem + * @problem.severity error + * @precision high + * @id java/file-path-injection + * @tags security + * external/cwe-073 + */ + +import java +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.PathCreation +import JFinalController +import experimental.semmle.code.java.PathSanitizer +import DataFlow::PathGraph + +class InjectFilePathConfig extends TaintTracking::Configuration { + InjectFilePathConfig() { this = "InjectFilePathConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { + sink.asExpr() = any(PathCreation p).getAnInput() and + not sink instanceof NormalizedPathNode + } + + override predicate isSanitizer(DataFlow::Node node) { + exists(Type t | t = node.getType() | t instanceof BoxedType or t instanceof PrimitiveType) + } + + override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { + guard instanceof PathTraversalBarrierGuard + } +} + +from DataFlow::PathNode source, DataFlow::PathNode sink, InjectFilePathConfig conf +where conf.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "External control of file name or path due to $@.", + source.getNode(), "user-provided value" diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/JFinalController.qll b/java/ql/src/experimental/Security/CWE/CWE-073/JFinalController.qll new file mode 100644 index 00000000000..264e1e31ed2 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-073/JFinalController.qll @@ -0,0 +1,83 @@ +import java +import semmle.code.java.dataflow.FlowSources + +/** The class `com.jfinal.core.Controller`. */ +class JFinalController extends RefType { + JFinalController() { this.hasQualifiedName("com.jfinal.core", "Controller") } +} + +/** The method `getSessionAttr` of `JFinalController`. */ +class GetSessionAttributeMethod extends Method { + GetSessionAttributeMethod() { + this.getName() = "getSessionAttr" and + this.getDeclaringType().getASupertype*() instanceof JFinalController + } +} + +/** The method `setSessionAttr` of `JFinalController`. */ +class SetSessionAttributeMethod extends Method { + SetSessionAttributeMethod() { + this.getName() = "setSessionAttr" and + this.getDeclaringType().getASupertype*() instanceof JFinalController + } +} + +/** A request attribute getter method of `JFinalController`. */ +class GetRequestAttributeMethod extends Method { + GetRequestAttributeMethod() { + this.getName().matches("getAttr%") and + this.getDeclaringType().getASupertype*() instanceof JFinalController + } +} + +/** A request attribute setter method of `JFinalController`. */ +class SetRequestAttributeMethod extends Method { + SetRequestAttributeMethod() { + this.getName() = ["set", "setAttr"] and + this.getDeclaringType().getASupertype*() instanceof JFinalController + } +} + +/** + * Value step from a setter call to a corresponding getter call relating to a + * session or request attribute. + */ +private class SetToGetAttributeStep extends AdditionalValueStep { + override predicate step(DataFlow::Node pred, DataFlow::Node succ) { + exists(MethodAccess gma, MethodAccess sma | + ( + gma.getMethod() instanceof GetSessionAttributeMethod and + sma.getMethod() instanceof SetSessionAttributeMethod + or + gma.getMethod() instanceof GetRequestAttributeMethod and + sma.getMethod() instanceof SetRequestAttributeMethod + ) and + gma.getArgument(0).(CompileTimeConstantExpr).getStringValue() = + sma.getArgument(0).(CompileTimeConstantExpr).getStringValue() + | + pred.asExpr() = sma.getArgument(1) and + succ.asExpr() = gma + ) + } +} + +/** Remote flow source models relating to `JFinal`. */ +private class JFinalControllerSource extends SourceModelCsv { + override predicate row(string row) { + row = + [ + "com.jfinal.core;Controller;true;getCookie" + ["", "Object", "Objects", "ToInt", "ToLong"] + + ";;;ReturnValue;remote", + "com.jfinal.core;Controller;true;getFile" + ["", "s"] + ";;;ReturnValue;remote", + "com.jfinal.core;Controller;true;getHeader;;;ReturnValue;remote", + "com.jfinal.core;Controller;true;getKv;;;ReturnValue;remote", + "com.jfinal.core;Controller;true;getPara" + + [ + "", "Map", "ToBoolean", "ToDate", "ToInt", "ToLong", "Values", "ValuesToInt", + "ValuesToLong" + ] + ";;;ReturnValue;remote", + "com.jfinal.core;Controller;true;get" + ["", "Int", "Long", "Boolean", "Date"] + + ";;;ReturnValue;remote" + ] + } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/CheckedHostnameVerification.java b/java/ql/src/experimental/Security/CWE/CWE-297/CheckedHostnameVerification.java new file mode 100644 index 00000000000..9f17b1fc972 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-297/CheckedHostnameVerification.java @@ -0,0 +1,10 @@ +public SSLSocket connect(String host, int port, HostnameVerifier verifier) { + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + boolean successful = verifier.verify(host, socket.getSession()); + if (!successful) { + socket.close(); + throw new SSLException("Oops! Hostname verification failed!"); + } + return socket; +} \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.java b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.java new file mode 100644 index 00000000000..25436051dbc --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.java @@ -0,0 +1,6 @@ +public SSLSocket connect(String host, int port, HostnameVerifier verifier) { + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + verifier.verify(host, socket.getSession()); + return socket; +} \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.qhelp b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.qhelp new file mode 100644 index 00000000000..e5756d9caee --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.qhelp @@ -0,0 +1,42 @@ + + + + +

    +The method HostnameVerifier.verify() checks that the hostname from the server's certificate +matches the server hostname after an HTTPS connection is established. +The method returns true if the hostname is acceptable and false otherwise. The contract of the method +does not require it to throw an exception if the verification failed. +Therefore, a caller has to check the result and drop the connection if the hostname verification failed. +Otherwise, an attacker may be able to implement a man-in-the-middle attack and impersonate the server. +

    +
    + + +

    +Always check the result of HostnameVerifier.verify() and drop the connection +if the method returns false. +

    +
    + + +

    +In the following example, the method HostnameVerifier.verify() is called but its result is ignored. +As a result, no hostname verification actually happens. +

    + + +

    +In the next example, the result of the HostnameVerifier.verify() method is checked +and an exception is thrown if the verification failed. +

    + +
    + + +
  • + Java API Specification: + HostnameVerifier.verify() method. +
  • +
    +
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql new file mode 100644 index 00000000000..55d51a19a8c --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql @@ -0,0 +1,29 @@ +/** + * @name Ignored result of hostname verification + * @description The method HostnameVerifier.verify() returns a result of hostname verification. + * A caller has to check the result and drop the connection if the verification failed. + * @kind problem + * @problem.severity error + * @precision high + * @id java/ignored-hostname-verification + * @tags security + * external/cwe/cwe-297 + */ + +import java +import semmle.code.java.security.Encryption + +/** A `HostnameVerifier.verify()` call that is not wrapped in another `HostnameVerifier`. */ +private class HostnameVerificationCall extends MethodAccess { + HostnameVerificationCall() { + this.getMethod() instanceof HostnameVerifierVerify and + not this.getCaller() instanceof HostnameVerifierVerify + } + + /** Holds if the result of the call is not used. */ + predicate isIgnored() { this = any(ExprStmt es).getExpr() } +} + +from HostnameVerificationCall verification +where verification.isIgnored() +select verification, "Ignored result of hostname verification." diff --git a/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll b/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll new file mode 100644 index 00000000000..9e76410a6ff --- /dev/null +++ b/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll @@ -0,0 +1,193 @@ +import java +import semmle.code.java.controlflow.Guards +import semmle.code.java.dataflow.FlowSources + +/** A barrier guard that protects against path traversal vulnerabilities. */ +abstract class PathTraversalBarrierGuard extends DataFlow::BarrierGuard { } + +/** + * A guard that considers safe a string being exactly compared to a trusted value. + */ +private class ExactStringPathMatchGuard extends PathTraversalBarrierGuard instanceof MethodAccess { + ExactStringPathMatchGuard() { + super.getMethod().getDeclaringType() instanceof TypeString and + super.getMethod().getName() = ["equals", "equalsIgnoreCase"] + } + + override predicate checks(Expr e, boolean branch) { + e = super.getQualifier() and + branch = true + } +} + +private class AllowListGuard extends Guard instanceof MethodAccess { + AllowListGuard() { + (isStringPartialMatch(this) or isPathPartialMatch(this)) and + not isDisallowedWord(super.getAnArgument()) + } + + Expr getCheckedExpr() { result = super.getQualifier() } +} + +/** + * A guard that considers a path safe because it is checked against an allowlist of partial trusted values. + * This requires additional protection against path traversal, either another guard (`PathTraversalGuard`) + * or a sanitizer (`PathNormalizeSanitizer`), to ensure any internal `..` components are removed from the path. + */ +private class AllowListBarrierGuard extends PathTraversalBarrierGuard instanceof AllowListGuard { + override predicate checks(Expr e, boolean branch) { + e = super.getCheckedExpr() and + branch = true and + ( + // Either a path normalization sanitizer comes before the guard, + exists(PathNormalizeSanitizer sanitizer | DataFlow::localExprFlow(sanitizer, e)) + or + // or a check like `!path.contains("..")` comes before the guard + exists(PathTraversalGuard previousGuard | + DataFlow::localExprFlow(previousGuard.getCheckedExpr(), e) and + previousGuard.controls(this.getBasicBlock().(ConditionBlock), false) + ) + ) + } +} + +/** + * A guard that considers a path safe because it is checked for `..` components, having previously + * been checked for a trusted prefix. + */ +private class DotDotCheckBarrierGuard extends PathTraversalBarrierGuard instanceof PathTraversalGuard { + override predicate checks(Expr e, boolean branch) { + e = super.getCheckedExpr() and + branch = false and + // The same value has previously been checked against a list of allowed prefixes: + exists(AllowListGuard previousGuard | + DataFlow::localExprFlow(previousGuard.getCheckedExpr(), e) and + previousGuard.controls(this.getBasicBlock().(ConditionBlock), true) + ) + } +} + +private class BlockListGuard extends Guard instanceof MethodAccess { + BlockListGuard() { + (isStringPartialMatch(this) or isPathPartialMatch(this)) and + isDisallowedWord(super.getAnArgument()) + } + + Expr getCheckedExpr() { result = super.getQualifier() } +} + +/** + * A guard that considers a string safe because it is checked against a blocklist of known dangerous values. + * This requires a prior check for URL encoding concealing a forbidden value, either a guard (`UrlEncodingGuard`) + * or a sanitizer (`UrlDecodeSanitizer`). + */ +private class BlockListBarrierGuard extends PathTraversalBarrierGuard instanceof BlockListGuard { + override predicate checks(Expr e, boolean branch) { + e = super.getCheckedExpr() and + branch = false and + ( + // Either `e` has been URL decoded: + exists(UrlDecodeSanitizer sanitizer | DataFlow::localExprFlow(sanitizer, e)) + or + // or `e` has previously been checked for URL encoding sequences: + exists(UrlEncodingGuard previousGuard | + DataFlow::localExprFlow(previousGuard.getCheckedExpr(), e) and + previousGuard.controls(this.getBasicBlock(), false) + ) + ) + } +} + +/** + * A guard that considers a string safe because it is checked for URL encoding sequences, + * having previously been checked against a block-list of forbidden values. + */ +private class URLEncodingBarrierGuard extends PathTraversalBarrierGuard instanceof UrlEncodingGuard { + override predicate checks(Expr e, boolean branch) { + e = super.getCheckedExpr() and + branch = false and + exists(BlockListGuard previousGuard | + DataFlow::localExprFlow(previousGuard.getCheckedExpr(), e) and + previousGuard.controls(this.getBasicBlock(), false) + ) + } +} + +/** + * Holds if `ma` is a call to a method that checks a partial string match. + */ +private predicate isStringPartialMatch(MethodAccess ma) { + ma.getMethod().getDeclaringType() instanceof TypeString and + ma.getMethod().getName() = + ["contains", "startsWith", "matches", "regionMatches", "indexOf", "lastIndexOf"] +} + +/** + * Holds if `ma` is a call to a method of `java.nio.file.Path` that checks a partial path match. + */ +private predicate isPathPartialMatch(MethodAccess ma) { + ma.getMethod().getDeclaringType() instanceof TypePath and + ma.getMethod().getName() = "startsWith" +} + +private predicate isDisallowedWord(CompileTimeConstantExpr word) { + word.getStringValue().matches(["%WEB-INF%", "%META-INF%", "%..%"]) +} + +/** A complementary guard that protects against path traversal, by looking for the literal `..`. */ +class PathTraversalGuard extends Guard instanceof MethodAccess { + Expr checked; + + PathTraversalGuard() { + super.getMethod().getDeclaringType() instanceof TypeString and + super.getMethod().hasName(["contains", "indexOf"]) and + super.getAnArgument().(CompileTimeConstantExpr).getStringValue() = ".." + } + + Expr getCheckedExpr() { result = super.getQualifier() } +} + +/** A complementary sanitizer that protects against path traversal using path normalization. */ +private class PathNormalizeSanitizer extends MethodAccess { + PathNormalizeSanitizer() { + this.getMethod().getDeclaringType().hasQualifiedName("java.nio.file", "Path") and + this.getMethod().hasName("normalize") + } +} + +/** A complementary guard that protects against double URL encoding, by looking for the literal `%`. */ +private class UrlEncodingGuard extends Guard instanceof MethodAccess { + UrlEncodingGuard() { + super.getMethod().getDeclaringType() instanceof TypeString and + super.getMethod().hasName(["contains", "indexOf"]) and + super.getAnArgument().(CompileTimeConstantExpr).getStringValue() = "%" + } + + Expr getCheckedExpr() { result = super.getQualifier() } +} + +/** A complementary sanitizer that protects against double URL encoding using URL decoding. */ +private class UrlDecodeSanitizer extends MethodAccess { + UrlDecodeSanitizer() { + this.getMethod().getDeclaringType().hasQualifiedName("java.net", "URLDecoder") and + this.getMethod().hasName("decode") + } +} + +/** A node with path normalization. */ +class NormalizedPathNode extends DataFlow::Node { + NormalizedPathNode() { + TaintTracking::localExprTaint(this.asExpr(), any(PathNormalizeSanitizer ma)) + } +} + +/** Data model related to `java.nio.file.Path`. */ +private class PathDataModel extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "java.nio.file;Paths;true;get;;;Argument[0];ReturnValue;taint", + "java.nio.file;Path;true;normalize;;;Argument[-1];ReturnValue;taint" + ] + } +} diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 596c088fb16..f2225594008 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.0.8-dev +version: 0.0.10-dev groups: - java - queries diff --git a/java/ql/src/utils/model-generator/RegenerateModels.py b/java/ql/src/utils/model-generator/RegenerateModels.py new file mode 100755 index 00000000000..3b2920a5e8a --- /dev/null +++ b/java/ql/src/utils/model-generator/RegenerateModels.py @@ -0,0 +1,53 @@ +#!/usr/bin/python3 + +# Tool to regenerate existing framework CSV models. + +from pathlib import Path +import json +import os +import requests +import shutil +import subprocess +import tempfile +import sys + + +defaultModelPath = "java/ql/lib/semmle/code/java/frameworks" +lgtmSlugToModelFile = { + # "apache/commons-beanutils": "apache/BeanUtilsGenerated.qll", + # "apache/commons-codec": "apache/CodecGenerated.qll", + # "apache/commons-lang": "apache/Lang3Generated.qll", + "apache/commons-io": "apache/IOGenerated.qll", +} + + +def findGitRoot(): + return subprocess.check_output( + ["git", "rev-parse", "--show-toplevel"]).decode("utf-8").strip() + + +def regenerateModel(lgtmSlug, extractedDb): + tmpDir = tempfile.mkdtemp() + print("============================================================") + print("Generating models for " + lgtmSlug) + print("============================================================") + # check if lgtmSlug exists as key + if lgtmSlug not in lgtmSlugToModelFile: + print("ERROR: slug " + lgtmSlug + + " is not mapped to a model file in script " + sys.argv[0]) + sys.exit(1) + modelFile = defaultModelPath + "/" + lgtmSlugToModelFile[lgtmSlug] + codeQlRoot = findGitRoot() + targetModel = codeQlRoot + "/" + modelFile + subprocess.check_call([codeQlRoot + "/java/ql/src/utils/model-generator/GenerateFlowModel.py", extractedDb, + targetModel]) + print("Regenerated " + targetModel) + shutil.rmtree(tmpDir) + + +if len(sys.argv) == 3: + lgtmSlug = sys.argv[1] + db = sys.argv[2] + regenerateModel(lgtmSlug, db) +else: + print('error') diff --git a/java/ql/test/TestUtilities/InlineExpectationsTest.qll b/java/ql/test/TestUtilities/InlineExpectationsTest.qll index 52a790cca28..7d605a491ee 100644 --- a/java/ql/test/TestUtilities/InlineExpectationsTest.qll +++ b/java/ql/test/TestUtilities/InlineExpectationsTest.qll @@ -93,7 +93,7 @@ private import InlineExpectationsTestPrivate /** - * Base class for tests with inline expectations. The test extends this class to provide the actual + * The base class for tests with inline expectations. The test extends this class to provide the actual * results of the query, which are then compared with the expected results in comments to produce a * list of failure messages that point out where the actual results differ from the expected * results. @@ -123,6 +123,15 @@ abstract class InlineExpectationsTest extends string { */ abstract predicate hasActualResult(Location location, string element, string tag, string value); + /** + * Like `hasActualResult`, but returns results that do not require a matching annotation. + * A failure will still arise if there is an annotation that does not match any results, but not vice versa. + * Override this predicate to specify optional results. + */ + predicate hasOptionalResult(Location location, string element, string tag, string value) { + none() + } + final predicate hasFailureMessage(FailureLocatable element, string message) { exists(ActualResult actualResult | actualResult.getTest() = this and @@ -134,7 +143,8 @@ abstract class InlineExpectationsTest extends string { ) or not exists(ValidExpectation expectation | expectation.matchesActualResult(actualResult)) and - message = "Unexpected result: " + actualResult.getExpectationText() + message = "Unexpected result: " + actualResult.getExpectationText() and + not actualResult.isOptional() ) ) or @@ -243,9 +253,13 @@ private string expectationPattern() { private newtype TFailureLocatable = TActualResult( - InlineExpectationsTest test, Location location, string element, string tag, string value + InlineExpectationsTest test, Location location, string element, string tag, string value, + boolean optional ) { - test.hasActualResult(location, element, tag, value) + test.hasActualResult(location, element, tag, value) and + optional = false + or + test.hasOptionalResult(location, element, tag, value) and optional = true } or TValidExpectation(ExpectationComment comment, string tag, string value, string knownFailure) { exists(TColumn column, string tags | @@ -277,8 +291,9 @@ class ActualResult extends FailureLocatable, TActualResult { string element; string tag; string value; + boolean optional; - ActualResult() { this = TActualResult(test, location, element, tag, value) } + ActualResult() { this = TActualResult(test, location, element, tag, value, optional) } override string toString() { result = element } @@ -289,6 +304,8 @@ class ActualResult extends FailureLocatable, TActualResult { override string getTag() { result = tag } override string getValue() { result = value } + + predicate isOptional() { optional = true } } abstract private class Expectation extends FailureLocatable { diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected new file mode 100644 index 00000000000..5720de5c4b9 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.expected @@ -0,0 +1,20 @@ +edges +| FilePathInjection.java:21:21:21:34 | getPara(...) : String | FilePathInjection.java:26:47:26:59 | finalFilePath | +| FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | +| FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | +| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath | +nodes +| FilePathInjection.java:21:21:21:34 | getPara(...) : String | semmle.label | getPara(...) : String | +| FilePathInjection.java:26:47:26:59 | finalFilePath | semmle.label | finalFilePath | +| FilePathInjection.java:64:21:64:34 | getPara(...) : String | semmle.label | getPara(...) : String | +| FilePathInjection.java:72:47:72:59 | finalFilePath | semmle.label | finalFilePath | +| FilePathInjection.java:87:21:87:34 | getPara(...) : String | semmle.label | getPara(...) : String | +| FilePathInjection.java:95:47:95:59 | finalFilePath | semmle.label | finalFilePath | +| FilePathInjection.java:205:17:205:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| FilePathInjection.java:209:24:209:31 | filePath | semmle.label | filePath | +subpaths +#select +| FilePathInjection.java:26:47:26:59 | finalFilePath | FilePathInjection.java:21:21:21:34 | getPara(...) : String | FilePathInjection.java:26:47:26:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:21:21:21:34 | getPara(...) | user-provided value | +| FilePathInjection.java:72:47:72:59 | finalFilePath | FilePathInjection.java:64:21:64:34 | getPara(...) : String | FilePathInjection.java:72:47:72:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:64:21:64:34 | getPara(...) | user-provided value | +| FilePathInjection.java:95:47:95:59 | finalFilePath | FilePathInjection.java:87:21:87:34 | getPara(...) : String | FilePathInjection.java:95:47:95:59 | finalFilePath | External control of file name or path due to $@. | FilePathInjection.java:87:21:87:34 | getPara(...) | user-provided value | +| FilePathInjection.java:209:24:209:31 | filePath | FilePathInjection.java:205:17:205:44 | getParameter(...) : String | FilePathInjection.java:209:24:209:31 | filePath | External control of file name or path due to $@. | FilePathInjection.java:205:17:205:44 | getParameter(...) | user-provided value | diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.java b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.java new file mode 100644 index 00000000000..2534386a210 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.java @@ -0,0 +1,245 @@ +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.io.IOException; +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import com.jfinal.core.Controller; + +public class FilePathInjection extends Controller { + private static final String BASE_PATH = "/pages"; + + // BAD: Upload file to user specified path without validation + public void uploadFile() throws IOException { + String savePath = getPara("dir"); + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + savePath; + + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(finalFilePath); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + + // GOOD: Upload file to user specified path with path normalization and validation + public void uploadFile2() throws IOException { + String savePath = getPara("dir"); + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + savePath; + Path path = Paths.get(finalFilePath).normalize(); + + if (path.startsWith(BASE_PATH)) { + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(path.toFile()); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + } + + // BAD: Upload file to user specified path without validation through session attribute + public void uploadFile3() throws IOException { + String savePath = getPara("dir"); + setSessionAttr("uploadDir", savePath); + String sessionUploadDir = getSessionAttr("uploadDir"); + + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + sessionUploadDir; + + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(finalFilePath); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + + // BAD: Upload file to user specified path without validation through request attribute + public void uploadFile4() throws IOException { + String savePath = getPara("dir"); + setAttr("uploadDir2", savePath); + String requestUploadDir = getAttr("uploadDir2"); + + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + requestUploadDir; + + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(finalFilePath); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + + // BAD: Upload file to user specified path without validation through session object (not detected) + public void uploadFile5() throws IOException { + String savePath = getPara("dir"); + getSession().setAttribute("uploadDir3", savePath); + String sessionUploadDir = getSessionAttr("uploadDir3"); + + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + sessionUploadDir; + + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(finalFilePath); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + + // GOOD: Upload file to a system path from a request object + public void uploadFile6() throws IOException { + setAttr("uploadDir4", "/data/upload_dir/"); + String requestUploadDir = getAttr("uploadDir4"); + + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + requestUploadDir; + + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(finalFilePath); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + + // GOOD: Upload file to a system path from a request object + public void uploadFile7() throws IOException { + String savePath = getPara("dir"); + setAttr("uploadDir5", savePath); + setAttr("realUploadDir", "/data/upload_dir/"); + String requestUploadDir = getAttr("realUploadDir5"); + + File file = getFile("fileParam").getFile(); + String finalFilePath = BASE_PATH + requestUploadDir; + + FileInputStream fis = new FileInputStream(file); + FileOutputStream fos = new FileOutputStream(finalFilePath); + int i = 0; + + do { + byte[] buf = new byte[1024]; + i = fis.read(buf); + fos.write(buf); + } while (i != -1); + + fis.close(); + fos.close(); + } + + private void readFile(HttpServletResponse resp, File file) { + OutputStream os = null; + FileInputStream fis = null; + try { + os = resp.getOutputStream(); + fis = new FileInputStream(file); + byte fileContent[] = new byte[(int) file.length()]; + fis.read(fileContent); + os.write(fileContent); + } catch (Exception e) { + System.err.println("Invalid directory or file " + file.getName()); + } finally { + try { + if (os != null) + os.close(); + } catch (Exception e2) { + } + try { + if (fis != null) + fis.close(); + } catch (Exception e2) { + } + } + } + + // BAD: Download file to user specified path without validation + public void downloadFile() throws FileNotFoundException, IOException { + HttpServletRequest request = getRequest(); + String path = request.getParameter("path"); + String filePath = BASE_PATH + path; + + HttpServletResponse resp = getResponse(); + File file = new File(filePath); + if (path != null && file.exists()) { + resp.setHeader("Content-type", "application/force-download"); + resp.setHeader("Content-Disposition", "inline;filename=\"" + filePath + "\""); + resp.setHeader("Content-Transfer-Encoding", "Binary"); + resp.setHeader("Content-length", "" + file.length()); + resp.setHeader("Content-Type", "application/octet-stream"); + resp.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); + readFile(resp, file); + } else { + System.err.println("File does not exist " + path); + } + } + + // GOOD: Download file with path validation + public void downloadFile2() throws FileNotFoundException, IOException { + HttpServletRequest request = getRequest(); + String path = request.getParameter("path"); + String filePath = BASE_PATH + path; + + HttpServletResponse resp = getResponse(); + if (!filePath.contains("..") && filePath.startsWith(BASE_PATH)) { + File file = new File(filePath); + if (file.exists()) { + resp.setHeader("Content-type", "application/force-download"); + resp.setHeader("Content-Disposition", "inline;filename=\"" + filePath + "\""); + resp.setHeader("Content-Transfer-Encoding", "Binary"); + resp.setHeader("Content-length", "" + file.length()); + resp.setHeader("Content-Type", "application/octet-stream"); + resp.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); + readFile(resp, file); + } else { + System.err.println("File does not exist " + path); + } + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.qlref b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.qlref new file mode 100644 index 00000000000..3c6db8058a6 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-073/FilePathInjection.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-073/FilePathInjection.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-073/options b/java/ql/test/experimental/query-tests/security/CWE-073/options new file mode 100644 index 00000000000..37389497415 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-073/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/jfinal-4.9.15 \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.expected b/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.expected new file mode 100644 index 00000000000..579da26bf21 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.expected @@ -0,0 +1 @@ +| IgnoredHostnameVerification.java:16:5:16:46 | verify(...) | Ignored result of hostname verification. | \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.java b/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.java new file mode 100644 index 00000000000..f79fd15af23 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.java @@ -0,0 +1,112 @@ +import java.io.IOException; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLException; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocket; +import javax.net.ssl.SSLSocketFactory; + +public class IgnoredHostnameVerification { + + // BAD: ignored result of HostnameVerifier.verify() + public static SSLSocket connectWithIgnoredHostnameVerification( + String host, int port, HostnameVerifier verifier) throws IOException { + + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + verifier.verify(host, socket.getSession()); + return socket; + } + + public static void check(boolean result) throws SSLException { + if (!result) { + throw new SSLException("Oops! Hostname verification failed!"); + } + } + + // GOOD: connect and check result of HostnameVerifier.verify() + public static SSLSocket connectWithHostnameVerification00( + String host, int port, HostnameVerifier verifier) throws IOException { + + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + check(verifier.verify(host, socket.getSession())); + return socket; + } + + // GOOD: connect and check result of HostnameVerifier.verify() + public static SSLSocket connectWithHostnameVerification01( + String host, int port, HostnameVerifier verifier) throws IOException { + + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + boolean successful = verifier.verify(host, socket.getSession()); + if (successful == false) { + socket.close(); + throw new SSLException("Oops! Hostname verification failed!"); + } + + return socket; + } + + // GOOD: connect and check result of HostnameVerifier.verify() + public static SSLSocket connectWithHostnameVerification02( + String host, int port, HostnameVerifier verifier) throws IOException { + + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + boolean successful = false; + if (verifier != null) { + successful = verifier.verify(host, socket.getSession()); + } + if (!successful) { + socket.close(); + throw new SSLException("Oops! Hostname verification failed!"); + } + + return socket; + } + + // GOOD: connect and check result of HostnameVerifier.verify() + public static SSLSocket connectWithHostnameVerification03( + String host, int port, HostnameVerifier verifier) throws IOException { + + SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); + socket.startHandshake(); + boolean successful = verifier.verify(host, socket.getSession()); + if (successful) { + return socket; + } + + socket.close(); + throw new SSLException("Oops! Hostname verification failed!"); + } + + // GOOD: connect and check result of HostnameVerifier.verify() + public static String connectWithHostnameVerification04( + String[] hosts, HostnameVerifier verifier, SSLSession session) throws IOException { + + for (String host : hosts) { + if (verifier.verify(host, session)) { + return host; + } + } + + throw new SSLException("Oops! Hostname verification failed!"); + } + + public static class HostnameVerifierWrapper implements HostnameVerifier { + + private final HostnameVerifier verifier; + + public HostnameVerifierWrapper(HostnameVerifier verifier) { + this.verifier = verifier; + } + + @Override + public boolean verify(String hostname, SSLSession session) { + return verifier.verify(hostname, session); // GOOD: wrapped calls should not be reported + } + + } + +} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.qlref b/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.qlref new file mode 100644 index 00000000000..454b421f7b2 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-297/IgnoredHostnameVerification.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql \ No newline at end of file diff --git a/java/ql/test/library-tests/localclasses/Test.java b/java/ql/test/library-tests/types/local-classes/Test.java similarity index 100% rename from java/ql/test/library-tests/localclasses/Test.java rename to java/ql/test/library-tests/types/local-classes/Test.java diff --git a/java/ql/test/library-tests/localclasses/test.expected b/java/ql/test/library-tests/types/local-classes/test.expected similarity index 100% rename from java/ql/test/library-tests/localclasses/test.expected rename to java/ql/test/library-tests/types/local-classes/test.expected diff --git a/java/ql/test/library-tests/localclasses/test.ql b/java/ql/test/library-tests/types/local-classes/test.ql similarity index 100% rename from java/ql/test/library-tests/localclasses/test.ql rename to java/ql/test/library-tests/types/local-classes/test.ql diff --git a/java/ql/test/library-tests/types/A.java b/java/ql/test/library-tests/types/numeric-types/A.java similarity index 100% rename from java/ql/test/library-tests/types/A.java rename to java/ql/test/library-tests/types/numeric-types/A.java diff --git a/java/ql/test/library-tests/types/FloatingPointTypes.expected b/java/ql/test/library-tests/types/numeric-types/FloatingPointTypes.expected similarity index 100% rename from java/ql/test/library-tests/types/FloatingPointTypes.expected rename to java/ql/test/library-tests/types/numeric-types/FloatingPointTypes.expected diff --git a/java/ql/test/library-tests/types/FloatingPointTypes.ql b/java/ql/test/library-tests/types/numeric-types/FloatingPointTypes.ql similarity index 100% rename from java/ql/test/library-tests/types/FloatingPointTypes.ql rename to java/ql/test/library-tests/types/numeric-types/FloatingPointTypes.ql diff --git a/java/ql/test/library-tests/types/IntegralTypes.expected b/java/ql/test/library-tests/types/numeric-types/IntegralTypes.expected similarity index 100% rename from java/ql/test/library-tests/types/IntegralTypes.expected rename to java/ql/test/library-tests/types/numeric-types/IntegralTypes.expected diff --git a/java/ql/test/library-tests/types/IntegralTypes.ql b/java/ql/test/library-tests/types/numeric-types/IntegralTypes.ql similarity index 100% rename from java/ql/test/library-tests/types/IntegralTypes.ql rename to java/ql/test/library-tests/types/numeric-types/IntegralTypes.ql diff --git a/java/ql/test/library-tests/types/NumericTypes.expected b/java/ql/test/library-tests/types/numeric-types/NumericTypes.expected similarity index 100% rename from java/ql/test/library-tests/types/NumericTypes.expected rename to java/ql/test/library-tests/types/numeric-types/NumericTypes.expected diff --git a/java/ql/test/library-tests/types/NumericTypes.ql b/java/ql/test/library-tests/types/numeric-types/NumericTypes.ql similarity index 100% rename from java/ql/test/library-tests/types/NumericTypes.ql rename to java/ql/test/library-tests/types/numeric-types/NumericTypes.ql diff --git a/java/ql/test/library-tests/record-classes/MyFinalRecord.java b/java/ql/test/library-tests/types/record-classes/MyFinalRecord.java similarity index 100% rename from java/ql/test/library-tests/record-classes/MyFinalRecord.java rename to java/ql/test/library-tests/types/record-classes/MyFinalRecord.java diff --git a/java/ql/test/library-tests/record-classes/MyRecord.java b/java/ql/test/library-tests/types/record-classes/MyRecord.java similarity index 100% rename from java/ql/test/library-tests/record-classes/MyRecord.java rename to java/ql/test/library-tests/types/record-classes/MyRecord.java diff --git a/java/ql/test/library-tests/record-classes/RecordClasses.expected b/java/ql/test/library-tests/types/record-classes/RecordClasses.expected similarity index 100% rename from java/ql/test/library-tests/record-classes/RecordClasses.expected rename to java/ql/test/library-tests/types/record-classes/RecordClasses.expected diff --git a/java/ql/test/library-tests/record-classes/RecordClasses.ql b/java/ql/test/library-tests/types/record-classes/RecordClasses.ql similarity index 100% rename from java/ql/test/library-tests/record-classes/RecordClasses.ql rename to java/ql/test/library-tests/types/record-classes/RecordClasses.ql diff --git a/java/ql/test/library-tests/record-classes/Test.java b/java/ql/test/library-tests/types/record-classes/Test.java similarity index 100% rename from java/ql/test/library-tests/record-classes/Test.java rename to java/ql/test/library-tests/types/record-classes/Test.java diff --git a/java/ql/test/library-tests/record-classes/options b/java/ql/test/library-tests/types/record-classes/options similarity index 100% rename from java/ql/test/library-tests/record-classes/options rename to java/ql/test/library-tests/types/record-classes/options diff --git a/java/ql/test/library-tests/types/sealed-classes/SealedClasses.expected b/java/ql/test/library-tests/types/sealed-classes/SealedClasses.expected new file mode 100644 index 00000000000..7d2efbbffd6 --- /dev/null +++ b/java/ql/test/library-tests/types/sealed-classes/SealedClasses.expected @@ -0,0 +1,12 @@ +| SealedClasses.java:5:25:5:44 | ExplicitPermitsClass | SealedClasses.java:7:25:7:38 | SealedSubClass | +| SealedClasses.java:5:25:5:44 | ExplicitPermitsClass | SealedClasses.java:10:29:10:45 | NonSealedSubClass | +| SealedClasses.java:5:25:5:44 | ExplicitPermitsClass | SealedClasses.java:12:24:12:36 | FinalSubClass | +| SealedClasses.java:7:25:7:38 | SealedSubClass | SealedClasses.java:8:24:8:39 | FinalSubSubClass | +| SealedClasses.java:17:22:17:45 | ExplicitPermitsInterface | SealedClasses.java:7:25:7:38 | SealedSubClass | +| SealedClasses.java:17:22:17:45 | ExplicitPermitsInterface | SealedClasses.java:19:22:19:39 | SealedSubInterface | +| SealedClasses.java:17:22:17:45 | ExplicitPermitsInterface | SealedClasses.java:22:26:22:46 | NonSealedSubInterface | +| SealedClasses.java:17:22:17:45 | ExplicitPermitsInterface | SealedClasses.java:24:12:24:22 | RecordClass | +| SealedClasses.java:17:22:17:45 | ExplicitPermitsInterface | SealedClasses.java:26:10:26:18 | EnumClass | +| SealedClasses.java:19:22:19:39 | SealedSubInterface | SealedClasses.java:20:24:20:42 | FinalInterfaceClass | +| SealedClasses.java:32:22:32:45 | ImplicitPermitsInterface | SealedClasses.java:33:26:33:52 | ImplicitPermitsSubInterface | +| SealedClasses.java:37:10:37:29 | ImplicitlySealedEnum | SealedClasses.java:38:9:38:9 | new ImplicitlySealedEnum(...) { ... } | diff --git a/java/ql/test/library-tests/types/sealed-classes/SealedClasses.java b/java/ql/test/library-tests/types/sealed-classes/SealedClasses.java new file mode 100644 index 00000000000..a6776960560 --- /dev/null +++ b/java/ql/test/library-tests/types/sealed-classes/SealedClasses.java @@ -0,0 +1,40 @@ +class SealedClasses { + static class NonSealedClass { } + interface NonSealedInterface { } + + static sealed class ExplicitPermitsClass permits SealedSubClass, NonSealedSubClass, FinalSubClass { } + + static sealed class SealedSubClass extends ExplicitPermitsClass implements ExplicitPermitsInterface { } + static final class FinalSubSubClass extends SealedSubClass { } + + static non-sealed class NonSealedSubClass extends ExplicitPermitsClass { } + + static final class FinalSubClass extends ExplicitPermitsClass { } + + static class ExtendingNonSealedClass extends NonSealedSubClass { } + + + sealed interface ExplicitPermitsInterface permits SealedSubClass, SealedSubInterface, NonSealedSubInterface, RecordClass, EnumClass { } + + sealed interface SealedSubInterface extends ExplicitPermitsInterface { } + static final class FinalInterfaceClass implements SealedSubInterface { } + + non-sealed interface NonSealedSubInterface extends ExplicitPermitsInterface { } + + record RecordClass() implements ExplicitPermitsInterface { } + + enum EnumClass implements ExplicitPermitsInterface { } + + interface ExtendingNonSealedInterface extends NonSealedSubInterface { } + + + // `permits` clause may be omitted if all subtypes are in the same compilation unit + sealed interface ImplicitPermitsInterface { } + non-sealed interface ImplicitPermitsSubInterface extends ImplicitPermitsInterface { } + + + // Enum with anonymous subclass is implicitly sealed, see JLS 17 8.9 + enum ImplicitlySealedEnum { + A { } + } +} diff --git a/java/ql/test/library-tests/types/sealed-classes/SealedClasses.ql b/java/ql/test/library-tests/types/sealed-classes/SealedClasses.ql new file mode 100644 index 00000000000..3bc84b85a17 --- /dev/null +++ b/java/ql/test/library-tests/types/sealed-classes/SealedClasses.ql @@ -0,0 +1,5 @@ +import java + +from ClassOrInterface c +where c.fromSource() +select c, c.getAPermittedSubtype() diff --git a/java/ql/test/library-tests/types/sealed-classes/options b/java/ql/test/library-tests/types/sealed-classes/options new file mode 100644 index 00000000000..e41003a6e3c --- /dev/null +++ b/java/ql/test/library-tests/types/sealed-classes/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --enable-preview -source 16 -target 16 diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/Files.java b/java/ql/test/query-tests/security/CWE-200/semmle/tests/Files.java new file mode 100644 index 00000000000..cc8c1a736ad --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/Files.java @@ -0,0 +1,22 @@ +package com.google.common.io; + +import java.io.File; + +public class Files { + /** Maximum loop count when creating temp directories. */ + private static final int TEMP_DIR_ATTEMPTS = 10000; + + public static File createTempDir() { + File baseDir = new File(System.getProperty("java.io.tmpdir")); + String baseName = System.currentTimeMillis() + "-"; + + for (int counter = 0; counter < TEMP_DIR_ATTEMPTS; counter++) { + File tempDir = new File(baseDir, baseName + counter); + if (tempDir.mkdir()) { + return tempDir; + } + } + throw new IllegalStateException("Failed to create directory within " + TEMP_DIR_ATTEMPTS + " attempts (tried " + + baseName + "0 to " + baseName + (TEMP_DIR_ATTEMPTS - 1) + ')'); + } +} diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected new file mode 100644 index 00000000000..7c21c3667a3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected @@ -0,0 +1,130 @@ +edges +| Files.java:10:24:10:69 | new File(...) : File | Files.java:14:37:14:43 | baseDir : File | +| Files.java:10:24:10:69 | new File(...) : File | Files.java:15:17:15:23 | tempDir | +| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:10:24:10:69 | new File(...) : File | +| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:14:37:14:43 | baseDir : File | +| Files.java:10:33:10:68 | getProperty(...) : String | Files.java:15:17:15:23 | tempDir | +| Files.java:14:28:14:64 | new File(...) : File | Files.java:15:17:15:23 | tempDir | +| Files.java:14:37:14:43 | baseDir : File | Files.java:14:28:14:64 | new File(...) : File | +| Test.java:34:24:34:69 | new File(...) : File | Test.java:37:63:37:69 | tempDir | +| Test.java:34:33:34:68 | getProperty(...) : String | Test.java:34:24:34:69 | new File(...) : File | +| Test.java:34:33:34:68 | getProperty(...) : String | Test.java:37:63:37:69 | tempDir | +| Test.java:48:29:48:94 | new File(...) : File | Test.java:51:63:51:74 | tempDirChild | +| Test.java:48:38:48:83 | new File(...) : File | Test.java:48:29:48:94 | new File(...) : File | +| Test.java:48:38:48:83 | new File(...) : File | Test.java:51:63:51:74 | tempDirChild | +| Test.java:48:47:48:82 | getProperty(...) : String | Test.java:48:38:48:83 | new File(...) : File | +| Test.java:48:47:48:82 | getProperty(...) : String | Test.java:51:63:51:74 | tempDirChild | +| Test.java:59:24:59:69 | new File(...) : File | Test.java:62:63:62:69 | tempDir | +| Test.java:59:33:59:68 | getProperty(...) : String | Test.java:59:24:59:69 | new File(...) : File | +| Test.java:59:33:59:68 | getProperty(...) : String | Test.java:62:63:62:69 | tempDir | +| Test.java:73:24:73:69 | new File(...) : File | Test.java:76:63:76:69 | tempDir | +| Test.java:73:33:73:68 | getProperty(...) : String | Test.java:73:24:73:69 | new File(...) : File | +| Test.java:73:33:73:68 | getProperty(...) : String | Test.java:76:63:76:69 | tempDir | +| Test.java:108:29:108:84 | new File(...) : File | Test.java:111:9:111:20 | tempDirChild | +| Test.java:108:38:108:73 | getProperty(...) : String | Test.java:108:29:108:84 | new File(...) : File | +| Test.java:108:38:108:73 | getProperty(...) : String | Test.java:111:9:111:20 | tempDirChild | +| Test.java:132:29:132:84 | new File(...) : File | Test.java:135:9:135:20 | tempDirChild | +| Test.java:132:38:132:73 | getProperty(...) : String | Test.java:132:29:132:84 | new File(...) : File | +| Test.java:132:38:132:73 | getProperty(...) : String | Test.java:135:9:135:20 | tempDirChild | +| Test.java:156:29:156:88 | new File(...) : File | Test.java:157:21:157:32 | tempDirChild : File | +| Test.java:156:38:156:73 | getProperty(...) : String | Test.java:156:29:156:88 | new File(...) : File | +| Test.java:156:38:156:73 | getProperty(...) : String | Test.java:157:21:157:32 | tempDirChild : File | +| Test.java:157:21:157:32 | tempDirChild : File | Test.java:157:21:157:41 | toPath(...) | +| Test.java:185:29:185:88 | new File(...) : File | Test.java:186:21:186:32 | tempDirChild : File | +| Test.java:185:38:185:73 | getProperty(...) : String | Test.java:185:29:185:88 | new File(...) : File | +| Test.java:185:38:185:73 | getProperty(...) : String | Test.java:186:21:186:32 | tempDirChild : File | +| Test.java:186:21:186:32 | tempDirChild : File | Test.java:186:21:186:41 | toPath(...) | +| Test.java:202:29:202:104 | new File(...) : File | Test.java:202:29:202:113 | toPath(...) : Path | +| Test.java:202:29:202:113 | toPath(...) : Path | Test.java:205:33:205:44 | tempDirChild | +| Test.java:202:38:202:73 | getProperty(...) : String | Test.java:202:29:202:104 | new File(...) : File | +| Test.java:214:29:214:102 | new File(...) : File | Test.java:214:29:214:111 | toPath(...) : Path | +| Test.java:214:29:214:111 | toPath(...) : Path | Test.java:217:31:217:42 | tempDirChild | +| Test.java:214:38:214:73 | getProperty(...) : String | Test.java:214:29:214:102 | new File(...) : File | +| Test.java:226:29:226:100 | new File(...) : File | Test.java:229:26:229:37 | tempDirChild : File | +| Test.java:226:38:226:73 | getProperty(...) : String | Test.java:226:29:226:100 | new File(...) : File | +| Test.java:226:38:226:73 | getProperty(...) : String | Test.java:229:26:229:37 | tempDirChild : File | +| Test.java:229:26:229:37 | tempDirChild : File | Test.java:229:26:229:46 | toPath(...) | +| Test.java:247:29:247:101 | new File(...) : File | Test.java:250:31:250:42 | tempDirChild : File | +| Test.java:247:38:247:73 | getProperty(...) : String | Test.java:247:29:247:101 | new File(...) : File | +| Test.java:247:38:247:73 | getProperty(...) : String | Test.java:250:31:250:42 | tempDirChild : File | +| Test.java:250:31:250:42 | tempDirChild : File | Test.java:250:31:250:51 | toPath(...) | +| Test.java:258:29:258:109 | new File(...) : File | Test.java:261:33:261:44 | tempDirChild : File | +| Test.java:258:38:258:73 | getProperty(...) : String | Test.java:258:29:258:109 | new File(...) : File | +| Test.java:258:38:258:73 | getProperty(...) : String | Test.java:261:33:261:44 | tempDirChild : File | +| Test.java:261:33:261:44 | tempDirChild : File | Test.java:261:33:261:53 | toPath(...) | +nodes +| Files.java:10:24:10:69 | new File(...) : File | semmle.label | new File(...) : File | +| Files.java:10:33:10:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Files.java:14:28:14:64 | new File(...) : File | semmle.label | new File(...) : File | +| Files.java:14:37:14:43 | baseDir : File | semmle.label | baseDir : File | +| Files.java:15:17:15:23 | tempDir | semmle.label | tempDir | +| Test.java:18:25:18:61 | createTempFile(...) | semmle.label | createTempFile(...) | +| Test.java:26:25:26:67 | createTempFile(...) | semmle.label | createTempFile(...) | +| Test.java:34:24:34:69 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:34:33:34:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:37:63:37:69 | tempDir | semmle.label | tempDir | +| Test.java:48:29:48:94 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:48:38:48:83 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:48:47:48:82 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:51:63:51:74 | tempDirChild | semmle.label | tempDirChild | +| Test.java:59:24:59:69 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:59:33:59:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:62:63:62:69 | tempDir | semmle.label | tempDir | +| Test.java:73:24:73:69 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:73:33:73:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:76:63:76:69 | tempDir | semmle.label | tempDir | +| Test.java:95:24:95:65 | createTempDir(...) | semmle.label | createTempDir(...) | +| Test.java:108:29:108:84 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:108:38:108:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:111:9:111:20 | tempDirChild | semmle.label | tempDirChild | +| Test.java:132:29:132:84 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:132:38:132:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:135:9:135:20 | tempDirChild | semmle.label | tempDirChild | +| Test.java:156:29:156:88 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:156:38:156:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:157:21:157:32 | tempDirChild : File | semmle.label | tempDirChild : File | +| Test.java:157:21:157:41 | toPath(...) | semmle.label | toPath(...) | +| Test.java:185:29:185:88 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:185:38:185:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:186:21:186:32 | tempDirChild : File | semmle.label | tempDirChild : File | +| Test.java:186:21:186:41 | toPath(...) | semmle.label | toPath(...) | +| Test.java:202:29:202:104 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:202:29:202:113 | toPath(...) : Path | semmle.label | toPath(...) : Path | +| Test.java:202:38:202:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:205:33:205:44 | tempDirChild | semmle.label | tempDirChild | +| Test.java:214:29:214:102 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:214:29:214:111 | toPath(...) : Path | semmle.label | toPath(...) : Path | +| Test.java:214:38:214:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:217:31:217:42 | tempDirChild | semmle.label | tempDirChild | +| Test.java:226:29:226:100 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:226:38:226:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:229:26:229:37 | tempDirChild : File | semmle.label | tempDirChild : File | +| Test.java:229:26:229:46 | toPath(...) | semmle.label | toPath(...) | +| Test.java:247:29:247:101 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:247:38:247:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:250:31:250:42 | tempDirChild : File | semmle.label | tempDirChild : File | +| Test.java:250:31:250:51 | toPath(...) | semmle.label | toPath(...) | +| Test.java:258:29:258:109 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:258:38:258:73 | getProperty(...) : String | semmle.label | getProperty(...) : String | +| Test.java:261:33:261:44 | tempDirChild : File | semmle.label | tempDirChild : File | +| Test.java:261:33:261:53 | toPath(...) | semmle.label | toPath(...) | +| Test.java:268:25:268:63 | createTempFile(...) | semmle.label | createTempFile(...) | +subpaths +#select +| Files.java:10:33:10:68 | getProperty(...) | Files.java:10:33:10:68 | getProperty(...) : String | Files.java:15:17:15:23 | tempDir | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Files.java:10:33:10:68 | getProperty(...) | system temp directory | +| Test.java:18:25:18:61 | createTempFile(...) | Test.java:18:25:18:61 | createTempFile(...) | Test.java:18:25:18:61 | createTempFile(...) | Local information disclosure vulnerability due to use of file readable by other local users. | Test.java:18:25:18:61 | createTempFile(...) | system temp directory | +| Test.java:26:25:26:67 | createTempFile(...) | Test.java:26:25:26:67 | createTempFile(...) | Test.java:26:25:26:67 | createTempFile(...) | Local information disclosure vulnerability due to use of file readable by other local users. | Test.java:26:25:26:67 | createTempFile(...) | system temp directory | +| Test.java:34:33:34:68 | getProperty(...) | Test.java:34:33:34:68 | getProperty(...) : String | Test.java:37:63:37:69 | tempDir | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:34:33:34:68 | getProperty(...) | system temp directory | +| Test.java:48:47:48:82 | getProperty(...) | Test.java:48:47:48:82 | getProperty(...) : String | Test.java:51:63:51:74 | tempDirChild | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:48:47:48:82 | getProperty(...) | system temp directory | +| Test.java:59:33:59:68 | getProperty(...) | Test.java:59:33:59:68 | getProperty(...) : String | Test.java:62:63:62:69 | tempDir | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:59:33:59:68 | getProperty(...) | system temp directory | +| Test.java:73:33:73:68 | getProperty(...) | Test.java:73:33:73:68 | getProperty(...) : String | Test.java:76:63:76:69 | tempDir | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:73:33:73:68 | getProperty(...) | system temp directory | +| Test.java:95:24:95:65 | createTempDir(...) | Test.java:95:24:95:65 | createTempDir(...) | Test.java:95:24:95:65 | createTempDir(...) | Local information disclosure vulnerability due to use of directory readable by other local users. | Test.java:95:24:95:65 | createTempDir(...) | system temp directory | +| Test.java:108:38:108:73 | getProperty(...) | Test.java:108:38:108:73 | getProperty(...) : String | Test.java:111:9:111:20 | tempDirChild | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:108:38:108:73 | getProperty(...) | system temp directory | +| Test.java:132:38:132:73 | getProperty(...) | Test.java:132:38:132:73 | getProperty(...) : String | Test.java:135:9:135:20 | tempDirChild | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:132:38:132:73 | getProperty(...) | system temp directory | +| Test.java:156:38:156:73 | getProperty(...) | Test.java:156:38:156:73 | getProperty(...) : String | Test.java:157:21:157:41 | toPath(...) | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:156:38:156:73 | getProperty(...) | system temp directory | +| Test.java:185:38:185:73 | getProperty(...) | Test.java:185:38:185:73 | getProperty(...) : String | Test.java:186:21:186:41 | toPath(...) | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:185:38:185:73 | getProperty(...) | system temp directory | +| Test.java:202:38:202:73 | getProperty(...) | Test.java:202:38:202:73 | getProperty(...) : String | Test.java:205:33:205:44 | tempDirChild | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:202:38:202:73 | getProperty(...) | system temp directory | +| Test.java:214:38:214:73 | getProperty(...) | Test.java:214:38:214:73 | getProperty(...) : String | Test.java:217:31:217:42 | tempDirChild | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:214:38:214:73 | getProperty(...) | system temp directory | +| Test.java:226:38:226:73 | getProperty(...) | Test.java:226:38:226:73 | getProperty(...) : String | Test.java:229:26:229:46 | toPath(...) | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:226:38:226:73 | getProperty(...) | system temp directory | +| Test.java:247:38:247:73 | getProperty(...) | Test.java:247:38:247:73 | getProperty(...) : String | Test.java:250:31:250:51 | toPath(...) | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:247:38:247:73 | getProperty(...) | system temp directory | +| Test.java:258:38:258:73 | getProperty(...) | Test.java:258:38:258:73 | getProperty(...) : String | Test.java:261:33:261:53 | toPath(...) | Local information disclosure vulnerability from $@ due to use of file or directory readable by other local users. | Test.java:258:38:258:73 | getProperty(...) | system temp directory | diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.qlref b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.qlref new file mode 100644 index 00000000000..e678a2426e7 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.qlref @@ -0,0 +1 @@ +Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-200/semmle/tests/Test.java new file mode 100644 index 00000000000..b5b708692f1 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/Test.java @@ -0,0 +1,282 @@ + +import java.util.Arrays; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import java.nio.file.StandardOpenOption; +import java.nio.file.attribute.PosixFilePermission; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.EnumSet; + +public class Test { + + void vulnerableFileCreateTempFile() throws IOException { + // VULNERABLE VERSION: + File tempVuln = File.createTempFile("random", "file"); + + // TO MAKE SAFE REWRITE TO: + File tempSafe = Files.createTempFile("random", "file").toFile(); + } + + void vulnerableFileCreateTempFileNull() throws IOException { + // VULNERABLE VERSION: + File tempVuln = File.createTempFile("random", "file", null); + + // TO MAKE SAFE REWRITE TO: + File tempSafe = Files.createTempFile("random", "file").toFile(); + } + + void vulnerableFileCreateTempFileTainted() throws IOException { + // GIVEN: + File tempDir = new File(System.getProperty("java.io.tmpdir")); + + // VULNERABLE VERSION: + File tempVuln = File.createTempFile("random", "file", tempDir); + + // TO MAKE SAFE REWRITE TO (v1): + File tempSafe1 = Files.createTempFile(tempDir.toPath(), "random", "file").toFile(); + + // TO MAKE SAFE REWRITE TO (v2): + File tempSafe2 = Files.createTempFile("random", "file").toFile(); + } + + void vulnerableFileCreateTempFileChildTainted() throws IOException { + // GIVEN: + File tempDirChild = new File(new File(System.getProperty("java.io.tmpdir")), "/child"); + + // VULNERABLE VERSION: + File tempVuln = File.createTempFile("random", "file", tempDirChild); + + // TO MAKE SAFE REWRITE TO: + File tempSafe = Files.createTempFile(tempDirChild.toPath(), "random", "file").toFile(); + } + + void vulnerableFileCreateTempFileCanonical() throws IOException { + // GIVEN: + File tempDir = new File(System.getProperty("java.io.tmpdir")).getCanonicalFile(); + + // VULNERABLE VERSION: + File tempVuln = File.createTempFile("random", "file", tempDir); + + // TO MAKE SAFE REWRITE TO (v1): + File tempSafe1 = Files.createTempFile(tempDir.toPath(), "random", "file").toFile(); + + // TO MAKE SAFE REWRITE TO (v2): + File tempSafe2 = Files.createTempFile("random", "file").toFile(); + } + + void vulnerableFileCreateTempFileAbsolute() throws IOException { + // GIVEN: + File tempDir = new File(System.getProperty("java.io.tmpdir")).getAbsoluteFile(); + + // VULNERABLE VERSION: + File tempVuln = File.createTempFile("random", "file", tempDir); + + // TO MAKE SAFE REWRITE TO (v1): + File tempSafe1 = Files.createTempFile(tempDir.toPath(), "random", "file").toFile(); + // TO MAKE SAFE REWRITE TO (v2): + File tempSafe2 = Files.createTempFile("random", "file").toFile(); + } + + void safeFileCreateTempFileTainted() throws IOException { + /* + * Creating a temporary directoy in the current user directory is not a + * vulnerability. + */ + File currentDirectory = new File(System.getProperty("user.dir")); + File temp = File.createTempFile("random", "file", currentDirectory); + } + + void vulnerableGuavaFilesCreateTempDir() { + // VULNERABLE VERSION: + File tempDir = com.google.common.io.Files.createTempDir(); + + // TO MAKE SAFE REWRITE TO: + File tempSafe; + try { + Files.createTempDirectory("random").toFile(); + } catch (IOException e) { + throw new RuntimeException("Failed to create temporary directory", e); + } + } + + void vulnerableFileCreateTempFileMkdirTainted() { + // GIVEN: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child"); + + // VULNERABLE VERSION: + tempDirChild.mkdir(); + + // TO MAKE SAFE REWRITE TO (v1): + File tempSafe1; + try { + tempSafe1 = Files.createTempDirectory(tempDirChild.toPath(), "random").toFile(); + } catch (IOException e) { + throw new RuntimeException("Failed to create temporary directory", e); + } + + // TO MAKE SAFE REWRITE TO (v2): + File tempSafe2; + try { + tempSafe2 = Files.createTempDirectory("random").toFile(); + } catch (IOException e) { + throw new RuntimeException("Failed to create temporary directory", e); + } + } + + void vulnerableFileCreateTempFileMkdirsTainted() { + // GIVEN: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child"); + + // VULNERABLE VERSION: + tempDirChild.mkdirs(); + + // TO MAKE SAFE REWRITE TO (v1): + File tempSafe1; + try { + tempSafe1 = Files.createTempDirectory(tempDirChild.toPath(), "random").toFile(); + } catch (IOException e) { + throw new RuntimeException("Failed to create temporary directory", e); + } + + // TO MAKE SAFE REWRITE TO (v2): + File tempSafe2; + try { + tempSafe2 = Files.createTempDirectory("random").toFile(); + } catch (IOException e) { + throw new RuntimeException("Failed to create temporary directory", e); + } + } + + void vulnerableFileCreateTempFilesWrite1() throws IOException { + // VULNERABLE VERSION: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child.txt"); + Files.write(tempDirChild.toPath(), Arrays.asList("secret"), StandardCharsets.UTF_8, StandardOpenOption.CREATE); + + // TO MAKE SAFE REWRITE TO (v1): + // Use this version if you care that the file has the exact path of `[java.io.tmpdir]/child.txt` + try { + Path tempSafe = Paths.get(System.getProperty("java.io.tmpdir"), "child.txt"); + Files.createFile(tempSafe, PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + Files.write(tempSafe, Arrays.asList("secret")); + } catch (IOException e) { + throw new RuntimeException("Failed to write temporary file", e); + } + + // TO MAKE SAFE REWRITE TO (v2): + // Use this version if you don't care that the file has an exact path. This will write to a file of the name `[java.io.tmpdir]/random[random string]child.txt` + try { + Path tempSafe = Files.createTempFile("random", "child.txt"); + Files.write(tempSafe, Arrays.asList("secret"), StandardCharsets.UTF_8, StandardOpenOption.CREATE); + } catch (IOException e) { + throw new RuntimeException("Failed to write temporary file", e); + } + } + + void vulnerableFileCreateTempFilesWrite2() throws IOException { + // GIVEN: + String secret = "secret"; + byte[] byteArrray = secret.getBytes(); + + // VULNERABLE VERSION: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child.txt"); + Files.write(tempDirChild.toPath(), byteArrray, StandardOpenOption.CREATE); + + // TO MAKE SAFE REWRITE TO (v1): + // Use this version if you care that the file has the exact path of `[java.io.tmpdir]/child.txt` + Path tempSafe1 = Paths.get(System.getProperty("java.io.tmpdir"), "child.txt"); + Files.createFile(tempSafe1, PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + Files.write(tempSafe1, byteArrray); + + // TO MAKE SAFE REWRITE TO (v2): + // Use this version if you don't care that the file has an exact path. This will write to a file of the name `[java.io.tmpdir]/random[random string]child.txt` + Path tempSafe2 = Files.createTempFile("random", "child.txt"); + Files.write(tempSafe2, byteArrray); + } + + void vulnerableFileCreateTempFilesNewBufferedWriter() throws IOException { + // GIVEN: + Path tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child-buffered-writer.txt").toPath(); + + // VULNERABLE VERSION: + Files.newBufferedWriter(tempDirChild); + + // TO MAKE SAFE REWRITE TO: + Files.createFile(tempDirChild, PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + Files.newBufferedWriter(tempDirChild); + } + + void vulnerableFileCreateTempFilesNewOutputStream() throws IOException { + // GIVEN: + Path tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child-output-stream.txt").toPath(); + + // VULNERABLE VERSION: + Files.newOutputStream(tempDirChild).close(); + + // TO MAKE SAFE REWRITE TO: + Files.createFile(tempDirChild, PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + Files.newOutputStream(tempDirChild).close(); + } + + void vulnerableFileCreateTempFilesCreateFile() throws IOException { + // GIVEN: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child-create-file.txt"); + + // VULNERABLE VERSION: + Files.createFile(tempDirChild.toPath()); + + // TO MAKE SAFE REWRITE TO: + Files.createFile(tempDirChild.toPath(), PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + } + + void safeFileCreateTempFilesCreateFile() throws IOException { + // Clear permissions intentions by setting the 'OWNER_READ' and 'OWNER_WRITE' + // permissions. + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child-create-file.txt"); + Files.createFile( + tempDirChild.toPath(), + PosixFilePermissions + .asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + } + + void vulnerableFileCreateDirectory() throws IOException { + // GIVEN: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child-create-directory"); + + // VULNERABLE VERSION: + Files.createDirectory(tempDirChild.toPath()); // Creates with permissions 'drwxr-xr-x' + + // TO MAKE SAFE REWRITE TO: + Files.createDirectory(tempDirChild.toPath(), PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + } + + void vulnerableFileCreateDirectories() throws IOException { + // GIVEN: + File tempDirChild = new File(System.getProperty("java.io.tmpdir"), "/child-create-directories/child"); + + // VULNERABLE VERSION: + Files.createDirectories(tempDirChild.toPath()); // Creates with permissions 'drwxr-xr-x' + + // TO MAKE SAFE REWRITE TO: + Files.createDirectories(tempDirChild.toPath(), PosixFilePermissions.asFileAttribute(EnumSet.of(PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE))); + } + + void safeFileCreationWithPermissions() throws IOException { + File tempFile = File.createTempFile("temp", "file.txt"); + tempFile.setReadable(false, false); + tempFile.setReadable(true, true); + } + + void notVulnerableCreateOnSystemPropertyDir() throws IOException { + File tempDir = new File(System.getProperty("java.io.tmpdir")); + tempDir.mkdir(); + } + + void notVulnerableCreateOnSystemPropertyDirs() throws IOException { + File tempDir = new File(System.getProperty("java.io.tmpdir")); + tempDir.mkdirs(); + } +} diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.expected b/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.java b/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.java new file mode 100644 index 00000000000..8dc61543ed6 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.java @@ -0,0 +1,144 @@ +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.Base64; +import android.app.Activity; +import android.content.ContentValues; +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteStatement; + +public class CleartextStorageAndroidDatabaseTest extends Activity { + + public void testCleartextStorageAndroiDatabaseSafe1(Context ctx, String name, String password) { + SQLiteDatabase db = ctx.openOrCreateDatabase("test", Context.MODE_PRIVATE, null); + db.execSQL("CREATE TABLE IF NOT EXISTS users(user VARCHAR, password VARCHAR);"); // Safe + } + + public void testCleartextStorageAndroiDatabaseSafe2(Context ctx, String name, String password) { + SQLiteDatabase db = ctx.openOrCreateDatabase("test", Context.MODE_PRIVATE, null); + db.execSQL("DROP TABLE passwords;"); // Safe - no sensitive value being stored + } + + public void testCleartextStorageAndroiDatabase0(Context ctx, String name, String password) { + SQLiteDatabase db = ctx.openOrCreateDatabase("test", Context.MODE_PRIVATE, null); + String query = "INSERT INTO users VALUES ('" + name + "', '" + password + "');"; + db.execSQL(query); // $ hasCleartextStorageAndroidDatabase + } + + public void testCleartextStorageAndroiDatabase1(Context ctx, String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + String query = "INSERT INTO users VALUES ('" + name + "', '" + password + "');"; + db.execSQL(query); // $ hasCleartextStorageAndroidDatabase + } + + public void testCleartextStorageAndroiDatabase2(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("", null); + String query = "INSERT INTO users VALUES (?, ?)"; + db.execSQL(query, new String[] {name, password}); // $ hasCleartextStorageAndroidDatabase + } + + //@formatter:off + public void testCleartextStorageAndroiDatabase3(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.create(null); + String query = "INSERT INTO users VALUES (?, ?)"; + db.execPerConnectionSQL(query, new String[] {name, password}); // $ hasCleartextStorageAndroidDatabase + } + //@formatter:on + + public void testCleartextStorageAndroiDatabaseSafe3(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // Safe - ContentValues aren't added to any database + } + + public void testCleartextStorageAndroiDatabase4(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.insert("table", null, cv); + } + + public void testCleartextStorageAndroiDatabase5(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.insertOrThrow("table", null, cv); + } + + public void testCleartextStorageAndroiDatabase6(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.insertWithOnConflict("table", null, cv, 0); + } + + public void testCleartextStorageAndroiDatabase7(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.replace("table", null, cv); + } + + public void testCleartextStorageAndroiDatabase8(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.replaceOrThrow("table", null, cv); + } + + public void testCleartextStorageAndroiDatabase9(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.update("table", cv, "", new String[] {}); + } + + public void testCleartextStorageAndroiDatabase10(String name, String password) { + SQLiteDatabase db = SQLiteDatabase.openDatabase("", null, 0); + ContentValues cv = new ContentValues(); + cv.put("username", name); + cv.put("password", password); // $ hasCleartextStorageAndroidDatabase + db.updateWithOnConflict("table", cv, "", new String[] {}, 0); + } + + public void testCleartextStorageAndroiDatabaseSafe4(SQLiteDatabase db, String name, + String password) { + String query = "INSERT INTO users VALUES ('" + name + "', '" + password + "');"; + SQLiteStatement stmt = db.compileStatement(query); // Safe - statement isn't executed + } + + public void testCleartextStorageAndroiDatabase11(SQLiteDatabase db, String name, + String password) { + String query = "INSERT INTO users VALUES ('" + name + "', '" + password + "');"; + SQLiteStatement stmt = db.compileStatement(query); // $ hasCleartextStorageAndroidDatabase + stmt.executeUpdateDelete(); + } + + public void testCleartextStorageAndroiDatabase12(SQLiteDatabase db, String name, + String password) { + String query = "INSERT INTO users VALUES ('" + name + "', '" + password + "');"; + SQLiteStatement stmt = db.compileStatement(query); // $ hasCleartextStorageAndroidDatabase + stmt.executeInsert(); + } + + public void testCleartextStorageAndroiDatabaseSafe5(String name, String password) + throws Exception { + SQLiteDatabase db = SQLiteDatabase.create(null); + String query = "INSERT INTO users VALUES (?, ?)"; + db.execSQL(query, new String[] {name, encrypt(password)}); // Safe + } + + private static String encrypt(String cleartext) throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(cleartext.getBytes(StandardCharsets.UTF_8)); + String encoded = Base64.getEncoder().encodeToString(hash); + return encoded; + } +} diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.ql b/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.ql new file mode 100644 index 00000000000..421b3a408c4 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-312/CleartextStorageAndroidDatabaseTest.ql @@ -0,0 +1,22 @@ +import java +import semmle.code.java.security.CleartextStorageAndroidDatabaseQuery +import TestUtilities.InlineExpectationsTest + +class CleartextStorageAndroidDatabaseTest extends InlineExpectationsTest { + CleartextStorageAndroidDatabaseTest() { this = "CleartextStorageAndroidDatabaseTest" } + + override string getARelevantTag() { result = "hasCleartextStorageAndroidDatabase" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasCleartextStorageAndroidDatabase" and + exists(SensitiveSource data, LocalDatabaseOpenMethodAccess s, Expr input, Expr store | + input = s.getAnInput() and + store = s.getAStore() and + data.flowsTo(input) + | + input.getLocation() = location and + element = input.toString() and + value = "" + ) + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/annotation/IntRange.java b/java/ql/test/stubs/google-android-9.0.0/android/annotation/IntRange.java new file mode 100644 index 00000000000..fdd1786ea5e --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/annotation/IntRange.java @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * 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 android.annotation; + +public @interface IntRange { + long from() default Long.MIN_VALUE; + + long to() default Long.MAX_VALUE; + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/database/DatabaseUtils.java b/java/ql/test/stubs/google-android-9.0.0/android/database/DatabaseUtils.java new file mode 100644 index 00000000000..0d0414c9fdf --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/database/DatabaseUtils.java @@ -0,0 +1,46 @@ +package android.database; + +import android.content.Context; +import android.database.sqlite.SQLiteDatabase; +import android.os.ParcelFileDescriptor; + +public class DatabaseUtils { + + public static ParcelFileDescriptor blobFileDescriptorForQuery(SQLiteDatabase db, String query, + String[] selectionArgs) { + return null; + } + + public static long longForQuery(SQLiteDatabase db, String query, String[] selectionArgs) { + return 0; + + } + + public static String stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs) { + return null; + + } + + public static void createDbFromSqlStatements(Context context, String dbName, int dbVersion, String sqlStatements) { + + } + + public static int queryNumEntries(SQLiteDatabase db, String table, String selection) { + return 0; + + } + + public static int queryNumEntries(SQLiteDatabase db, String table, String selection, String[] selectionArgs) { + return 0; + + } + + public static String[] appendSelectionArgs(String[] originalValues, String[] newValues) { + return null; + } + + public static String concatenateWhere(String a, String b) { + return null; + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/database/SQLException.java b/java/ql/test/stubs/google-android-9.0.0/android/database/SQLException.java new file mode 100644 index 00000000000..87da8071d5e --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/database/SQLException.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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 android.database; + +public class SQLException extends RuntimeException { + public SQLException() { + } + + public SQLException(String error) { + } + + public SQLException(String error, Throwable cause) { + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/database/sqlite/SQLiteException.java b/java/ql/test/stubs/google-android-9.0.0/android/database/sqlite/SQLiteException.java new file mode 100644 index 00000000000..323251bc00b --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/database/sqlite/SQLiteException.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * 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 android.database.sqlite; +import android.database.SQLException; + +public class SQLiteException extends SQLException { + public SQLiteException() { + } + + public SQLiteException(String error) { + } + + public SQLiteException(String error, Throwable cause) { + } + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/database/sqlite/SQLiteQueryBuilder.java b/java/ql/test/stubs/google-android-9.0.0/android/database/sqlite/SQLiteQueryBuilder.java new file mode 100644 index 00000000000..01b8942c6d7 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/database/sqlite/SQLiteQueryBuilder.java @@ -0,0 +1,57 @@ +package android.database.sqlite; + +import java.util.Map; +import java.util.Set; + +import android.content.ContentValues; +import android.os.CancellationSignal; + +public abstract class SQLiteQueryBuilder { + public abstract void delete(SQLiteDatabase db, String selection, String[] selectionArgs); + + public abstract void insert(SQLiteDatabase db, ContentValues values); + + public abstract void query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, + String groupBy, String having, String sortOrder); + + public abstract void query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, + String groupBy, String having, String sortOrder, String limit); + + public abstract void query(SQLiteDatabase db, String[] projectionIn, String selection, String[] selectionArgs, + String groupBy, String having, String sortOrder, String limit, CancellationSignal cancellationSignal); + + public abstract void update(SQLiteDatabase db, ContentValues values, String selection, String[] selectionArgs); + + public static String buildQueryString(boolean distinct, String tables, String[] columns, String where, + String groupBy, String having, String orderBy, String limit) { + return null; + } + + public abstract String buildQuery(String[] projectionIn, String selection, String groupBy, String having, String sortOrder, + String limit); + + public abstract String buildQuery(String[] projectionIn, String selection, String[] selectionArgs, String groupBy, + String having, String sortOrder, String limit); + + public abstract String buildUnionQuery(String[] subQueries, String sortOrder, String limit); + + public abstract String buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, + Set columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, + String selection, String[] selectionArgs, String groupBy, String having); + + public abstract String buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, + Set columnsPresentInTable, int computedColumnsOffset, String typeDiscriminatorValue, + String selection, String groupBy, String having); + + public static void appendColumns(StringBuilder s, String[] columns) { + } + + public abstract void setProjectionMap(Map columnMap); + + public abstract void setTables(String inTables); + + public abstract void appendWhere(CharSequence inWhere); + + public abstract void appendWhereStandalone(CharSequence inWhere); + +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java index 0df04265046..1a2ff3cc1da 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java @@ -16,7 +16,6 @@ package android.webkit; import java.io.InputStream; -import java.io.StringBufferInputStream; import java.util.Map; /** diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java index e6a7d5d7050..33c9a1b8a57 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java @@ -15,11 +15,8 @@ */ package android.webkit; +import java.net.CookieManager; import android.content.Context; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; /** * Manages settings state for a WebView. When a WebView is first created, it diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java index d9625b70771..3065a9df966 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java @@ -18,6 +18,7 @@ import android.content.Context; import android.view.View; public class WebView extends View { + public WebView(Context context) { super(context); } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java index 4b1bd58498b..03a98480210 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java @@ -15,9 +15,6 @@ */ package android.webkit; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - public class WebViewClient { /** * Give the host application a chance to take over the control when a new url is diff --git a/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/core/Controller.java b/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/core/Controller.java new file mode 100644 index 00000000000..72884b70268 --- /dev/null +++ b/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/core/Controller.java @@ -0,0 +1,347 @@ +package com.jfinal.core; + +import java.io.File; +import java.util.Date; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import com.jfinal.kit.Kv; +import com.jfinal.upload.UploadFile; + +public abstract class Controller { + public String getPara(String name) { + return null; + } + + public String getPara(String name, String defaultValue) { + return null; + } + + public Map getParaMap() { + return null; + } + + public Enumeration getParaNames() { + return null; + } + + public String[] getParaValues(String name) { + return null; + } + + public Integer[] getParaValuesToInt(String name) { + return null; + } + + public Long[] getParaValuesToLong(String name) { + return null; + } + + public Controller setAttr(String name, Object value) { + return null; + } + + public Controller setAttrs(Map attrMap) { + return null; + } + + public Enumeration getAttrNames() { + return null; + } + + public T getAttr(String name) { + return null; + } + + public T getAttr(String name, T defaultValue) { + return null; + } + + public String getAttrForStr(String name) { + return null; + } + + public Integer getAttrForInt(String name) { + return -1; + } + + public String getHeader(String name) { + return null; + } + + public Integer getParaToInt(String name) { + return null; + } + + public Integer getParaToInt(String name, Integer defaultValue) { + return null; + } + + public Long getParaToLong(String name) { + return null; + } + + public Long getParaToLong(String name, Long defaultValue) { + return null; + } + + public Boolean getParaToBoolean(String name) { + return false; + } + + public Boolean getParaToBoolean(String name, Boolean defaultValue) { + return false; + } + + public Boolean getParaToBoolean() { + return false; + } + + public Boolean getParaToBoolean(int index) { + return false; + } + + public Boolean getParaToBoolean(int index, Boolean defaultValue) { + return false; + } + + public Date getParaToDate(String name) { + return null; + } + + public Date getParaToDate(String name, Date defaultValue) { + return null; + } + + public Date getParaToDate() { + return null; + } + + public HttpServletRequest getRequest() { + return null; + } + + public HttpServletResponse getResponse() { + return null; + } + + public HttpSession getSession() { + return null; + } + + public HttpSession getSession(boolean create) { + return null; + } + + public T getSessionAttr(String key) { + return null; + } + + public T getSessionAttr(String key, T defaultValue) { + return null; + } + + public Controller setSessionAttr(String key, Object value) { + return null; + } + + public String getCookie(String name, String defaultValue) { + return null; + } + + public String getCookie(String name) { + return null; + } + + public Integer getCookieToInt(String name) { + return null; + } + + public Integer getCookieToInt(String name, Integer defaultValue) { + return null; + } + + public Long getCookieToLong(String name) { + return null; + } + + public Long getCookieToLong(String name, Long defaultValue) { + return null; + } + + public Cookie getCookieObject(String name) { + return null; + } + + public Cookie[] getCookieObjects() { + return null; + } + + public String getPara() { + return null; + } + + public String getPara(int index) { + return null; + } + + public String getPara(int index, String defaultValue) { + return null; + } + + public Integer getParaToInt(int index) { + return null; + } + + public Integer getParaToInt(int index, Integer defaultValue) { + return null; + } + + public Long getParaToLong(int index) { + return null; + } + + public Long getParaToLong(int index, Long defaultValue) { + return null; + } + + public Integer getParaToInt() { + return null; + } + + public Long getParaToLong() { + return null; + } + + public Kv getKv() { + return null; + } + + public List getFiles(String uploadPath, Integer maxPostSize, String encoding) { + return null; + } + + public UploadFile getFile(String parameterName, String uploadPath, Integer maxPostSize, String encoding) { + return null; + } + + public List getFiles(String uploadPath, int maxPostSize) { + return null; + } + + public UploadFile getFile(String parameterName, String uploadPath, int maxPostSize) { + return null; + } + + public List getFiles(String uploadPath) { + return null; + } + + public UploadFile getFile(String parameterName, String uploadPath) { + return null; + } + + public List getFiles() { + return null; + } + + public UploadFile getFile() { + return null; + } + + public UploadFile getFile(String parameterName) { + return null; + } + + public Controller set(String attributeName, Object attributeValue) { + return null; + } + + public String get(String name) { + return null; + } + + public String get(String name, String defaultValue) { + return null; + } + + public Integer getInt(String name) { + return -1; + } + + public Integer getInt(String name, Integer defaultValue) { + return -1; + } + + public Long getLong(String name) { + return null; + } + + public Long getLong(String name, Long defaultValue) { + return null; + } + + public Boolean getBoolean(String name) { + return false; + } + + public Boolean getBoolean(String name, Boolean defaultValue) { + return false; + } + + public Date getDate(String name) { + return null; + } + + public Date getDate(String name, Date defaultValue) { + return null; + } + + public String get(int index) { + return null; + } + + public String get(int index, String defaultValue) { + return null; + } + + public Integer getInt() { + return -1; + } + + public Integer getInt(int index) { + return -1; + } + + public Integer getInt(int index, Integer defaultValue) { + return -1; + } + + public Long getLong() { + return null; + } + + public Long getLong(int index) { + return null; + } + + public Long getLong(int index, Long defaultValue) { + return null; + } + + public Boolean getBoolean() { + return false; + } + + public Boolean getBoolean(int index) { + return false; + } + + public Boolean getBoolean(int index, Boolean defaultValue) { + return false; + } +} diff --git a/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/kit/Kv.java b/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/kit/Kv.java new file mode 100644 index 00000000000..ff8b112d05c --- /dev/null +++ b/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/kit/Kv.java @@ -0,0 +1,6 @@ +package com.jfinal.kit; + +import java.util.HashMap; + +public class Kv extends HashMap { +} diff --git a/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/upload/UploadFile.java b/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/upload/UploadFile.java new file mode 100644 index 00000000000..2e6063c4852 --- /dev/null +++ b/java/ql/test/stubs/jfinal-4.9.15/com/jfinal/upload/UploadFile.java @@ -0,0 +1,32 @@ +package com.jfinal.upload; + +import java.io.File; + +public class UploadFile { + public UploadFile(String parameterName, String uploadPath, String filesystemName, String originalFileName, String contentType) { + } + + public String getParameterName() { + return null; + } + + public String getFileName() { + return null; + } + + public String getOriginalFileName() { + return null; + } + + public String getContentType() { + return null; + } + + public String getUploadPath() { + return null; + } + + public File getFile() { + return null; + } +} diff --git a/javascript/ql/examples/queries/dataflow/BackendIdor/BackendIdor.ql b/javascript/ql/examples/queries/dataflow/BackendIdor/BackendIdor.ql index 3f7e555738e..3842475ecf8 100644 --- a/javascript/ql/examples/queries/dataflow/BackendIdor/BackendIdor.ql +++ b/javascript/ql/examples/queries/dataflow/BackendIdor/BackendIdor.ql @@ -13,7 +13,7 @@ import DataFlow import DataFlow::PathGraph /** - * Tracks user-controlled values into a 'userId' property sent to a backend service. + * A taint-tracking configuration that tracks user-controlled values into a 'userId' property sent to a backend service. */ class IdorTaint extends TaintTracking::Configuration { IdorTaint() { this = "IdorTaint" } @@ -34,7 +34,7 @@ class IdorTaint extends TaintTracking::Configuration { } /** - * Sanitize values that have succesfully been compared to another value. + * A sanitizer for values that have succesfully been compared to another value. */ class EqualityGuard extends TaintTracking::SanitizerGuardNode, ValueNode { override EqualityTest astNode; diff --git a/javascript/ql/examples/queries/dataflow/InformationDisclosure/InformationDisclosure.ql b/javascript/ql/examples/queries/dataflow/InformationDisclosure/InformationDisclosure.ql index 07a942967b1..1fe76a178e2 100644 --- a/javascript/ql/examples/queries/dataflow/InformationDisclosure/InformationDisclosure.ql +++ b/javascript/ql/examples/queries/dataflow/InformationDisclosure/InformationDisclosure.ql @@ -13,7 +13,8 @@ import DataFlow import DataFlow::PathGraph /** - * Tracks authentication tokens ("authKey") to a postMessage call with unrestricted target origin. + * A dataflow configuration that tracks authentication tokens ("authKey") + * to a postMessage call with unrestricted target origin. * * For example: * ``` diff --git a/javascript/ql/examples/queries/dataflow/StoredXss/StoredXss.ql b/javascript/ql/examples/queries/dataflow/StoredXss/StoredXss.ql index c18266451f8..c31095d4995 100644 --- a/javascript/ql/examples/queries/dataflow/StoredXss/StoredXss.ql +++ b/javascript/ql/examples/queries/dataflow/StoredXss/StoredXss.ql @@ -12,7 +12,7 @@ import semmle.javascript.security.dataflow.StoredXssQuery import DataFlow::PathGraph /** - * Data returned from a MySQL query, such as the `data` parameter in this example: + * The data returned from a MySQL query, such as the `data` parameter in this example: * ``` * let mysql = require('mysql'); * let connection = mysql.createConnection(); diff --git a/javascript/ql/examples/queries/dataflow/StoredXss/StoredXssTypeTracking.ql b/javascript/ql/examples/queries/dataflow/StoredXss/StoredXssTypeTracking.ql index c68541717f1..5309fac6900 100644 --- a/javascript/ql/examples/queries/dataflow/StoredXss/StoredXssTypeTracking.ql +++ b/javascript/ql/examples/queries/dataflow/StoredXss/StoredXssTypeTracking.ql @@ -28,7 +28,7 @@ DataFlow::SourceNode mysqlConnection(DataFlow::TypeTracker t) { DataFlow::SourceNode mysqlConnection() { result = mysqlConnection(DataFlow::TypeTracker::end()) } /** - * Data returned from a MySQL query. + * The data returned from a MySQL query. * * For example: * ``` diff --git a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/BaseScoring.qll b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/BaseScoring.qll index 5ef517e09ec..1af5966997a 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/BaseScoring.qll +++ b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/BaseScoring.qll @@ -15,7 +15,7 @@ external predicate availableMlModels( ATMConfig getCfg() { any() } /** - * Scoring information produced by a scoring model. + * A string containing scoring information produced by a scoring model. * * Scoring models include embedding models and endpoint scoring models. */ diff --git a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/FunctionBodyFeatures.qll b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/FunctionBodyFeatures.qll index 32c8a173e73..f93bedefb4a 100644 --- a/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/FunctionBodyFeatures.qll +++ b/javascript/ql/experimental/adaptivethreatmodeling/lib/experimental/adaptivethreatmodeling/FunctionBodyFeatures.qll @@ -127,6 +127,18 @@ ASTNode getAnASTNodeWithAFeature(Function f) { result = getAnASTNodeToFeaturize(f) } +/** Returns the number of source-code characters in a function. */ +int getNumCharsInFunction(Function f) { + result = + strictsum(ASTNode node | node = getAnASTNodeWithAFeature(f) | getTokenizedAstNode(node).length()) +} + +/** + * The maximum number of characters a feature can be. + * The evaluator string limit is 5395415 characters. We choose a limit lower than this. + */ +private int getMaxChars() { result = 1000000 } + /** * Returns a featurized representation of the function that can be used to populate the * `enclosingFunctionBody` feature for an endpoint. @@ -141,6 +153,9 @@ string getBodyTokensFeature(Function function) { node = getAnASTNodeToFeaturize(function) and exists(getTokenizedAstNode(node)) ) <= 256 and + // Performance optimization: If a function has more than getMaxChars() characters in its body subtokens, + // then featurize it as absent. + getNumCharsInFunction(function) <= getMaxChars() and result = strictconcat(Location l, string token | // The use of a nested exists here allows us to avoid duplicates due to two AST nodes in the diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/DebugResultInclusion.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/DebugResultInclusion.ql new file mode 100644 index 00000000000..9be2929fd41 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/DebugResultInclusion.ql @@ -0,0 +1,67 @@ +/** + * @name Debug result inclusion + * @description Use this query to understand why some alerts are included or excluded from the + * results of boosted queries. The results for this query are the union of the alerts + * generated by each boosted query. Each alert includes an explanation why it was + * included or excluded for each of the four security queries. + * @kind problem + * @problem.severity error + * @id adaptive-threat-modeling/js/debug-result-inclusion + */ + +import javascript +import experimental.adaptivethreatmodeling.ATMConfig +import extraction.ExtractEndpointData + +string getAReasonSinkExcluded(DataFlow::Node sinkCandidate, Query query) { + query instanceof NosqlInjectionQuery and + result = NosqlInjectionATM::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate) + or + query instanceof SqlInjectionQuery and + result = SqlInjectionATM::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate) + or + query instanceof TaintedPathQuery and + result = TaintedPathATM::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate) + or + query instanceof XssQuery and + result = XssATM::SinkEndpointFilter::getAReasonSinkExcluded(sinkCandidate) +} + +pragma[inline] +string getDescriptionForAlertCandidate( + DataFlow::Node sourceCandidate, DataFlow::Node sinkCandidate, Query query +) { + result = "excluded[reason=" + getAReasonSinkExcluded(sinkCandidate, query) + "]" + or + getATMCfg(query).isKnownSink(sinkCandidate) and + result = "excluded[reason=known-sink]" + or + not exists(getAReasonSinkExcluded(sinkCandidate, query)) and + not getDataFlowCfg(query).hasFlow(sourceCandidate, sinkCandidate) and + ( + if + getDataFlowCfg(query).isSource(sourceCandidate) or + getDataFlowCfg(query).isSource(sourceCandidate, _) + then result = "no flow" + else result = "not a known source" + ) + or + getDataFlowCfg(query).hasFlow(sourceCandidate, sinkCandidate) and + result = "included" +} + +pragma[inline] +string getDescriptionForAlert(DataFlow::Node sourceCandidate, DataFlow::Node sinkCandidate) { + result = + concat(Query query | + | + query.getName() + ": " + + getDescriptionForAlertCandidate(sourceCandidate, sinkCandidate, query), ", " + ) +} + +from DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink +where cfg.hasFlow(source, sink) +select sink, + "This is an ATM result that may depend on $@ [" + getDescriptionForAlert(source, sink) + "]", + source, "a user-provided value" diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/EndToEndEvaluation.qll b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/EndToEndEvaluation.qll new file mode 100644 index 00000000000..8bdd2015ec1 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/EndToEndEvaluation.qll @@ -0,0 +1,11 @@ +private import javascript +private import extraction.Exclusions as Exclusions + +/** + * Holds if the flow from `source` to `sink` should be excluded from the results of an end-to-end + * evaluation query. + */ +pragma[inline] +predicate isFlowExcluded(DataFlow::Node source, DataFlow::Node sink) { + Exclusions::isFileExcluded([source.getFile(), sink.getFile()]) +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/EndpointScoresIntegrationTest.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/EndpointScoresIntegrationTest.ql new file mode 100644 index 00000000000..bd7bc019475 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/EndpointScoresIntegrationTest.ql @@ -0,0 +1,27 @@ +/** + * EndpointScoresIntegrationTest.ql + * + * Extract scores for each test endpoint that is an argument to a function call in the database. + * This is used by integration tests to verify that QL and the modeling codebase agree on the scores + * of a set of test endpoints. + */ + +import javascript +import experimental.adaptivethreatmodeling.ATMConfig +import experimental.adaptivethreatmodeling.FeaturizationConfig +import experimental.adaptivethreatmodeling.EndpointScoring::ModelScoring as ModelScoring + +/** + * A featurization config that featurizes endpoints that are arguments to function calls. + * + * This should only be used in extraction queries and tests. + */ +class FunctionArgumentFeaturizationConfig extends FeaturizationConfig { + FunctionArgumentFeaturizationConfig() { this = "FunctionArgumentFeaturization" } + + override DataFlow::Node getAnEndpointToFeaturize() { + exists(DataFlow::CallNode call | result = call.getAnArgument()) + } +} + +query predicate endpointScores = ModelScoring::endpointScores/3; diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/ModelCheck.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/ModelCheck.ql new file mode 100644 index 00000000000..21458738fa5 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/ModelCheck.ql @@ -0,0 +1,16 @@ +/** + * ModelCheck.ql + * + * Returns checksums of ATM models. + */ + +/** + * The `availableMlModels` template predicate. + * + * This is populated by the evaluator with metadata for the available machine learning models. + */ +external predicate availableMlModels( + string modelChecksum, string modelLanguage, string modelName, string modelType +); + +select any(string checksum | availableMlModels(checksum, "javascript", _, _)) diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjection.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjection.ql new file mode 100644 index 00000000000..9cb452c675e --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjection.ql @@ -0,0 +1,24 @@ +/** + * NosqlInjection.ql + * + * Version of the standard NoSQL injection query with an output relation ready to plug into the + * evaluation pipeline. + */ + +import semmle.javascript.security.dataflow.NosqlInjection +import EndToEndEvaluation as EndToEndEvaluation + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource +where + cfg instanceof NosqlInjection::Configuration and + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjectionATM.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjectionATM.ql new file mode 100644 index 00000000000..38b2de667cf --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjectionATM.ql @@ -0,0 +1,28 @@ +/** + * NosqlInjectionATM.ql + * + * Version of the boosted NoSQL injection query with an output relation ready to plug into the + * evaluation pipeline. + */ + +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.NosqlInjectionATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + getScoreForFlow(source, sink) = score +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjectionATMLite.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjectionATMLite.ql new file mode 100644 index 00000000000..1db2d35bd75 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/NosqlInjectionATMLite.ql @@ -0,0 +1,29 @@ +/** + * NosqlInjectionATMLite.ql + * + * Arbitrarily ranked version of the boosted NoSQL injection query with an output relation ready to + * plug into the evaluation pipeline. This is useful (a) for evaluating the performance of endpoint + * filters, and (b) as a baseline to compare the model against. + */ + +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.NosqlInjectionATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + score = 0 +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjection.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjection.ql new file mode 100644 index 00000000000..d50bbb71208 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjection.ql @@ -0,0 +1,24 @@ +/** + * SqlInjection.ql + * + * Version of the standard SQL injection query with an output relation ready to plug into the + * evaluation pipeline. + */ + +import semmle.javascript.security.dataflow.SqlInjection +import EndToEndEvaluation as EndToEndEvaluation + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource +where + cfg instanceof SqlInjection::Configuration and + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjectionATM.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjectionATM.ql new file mode 100644 index 00000000000..da6dbe18972 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjectionATM.ql @@ -0,0 +1,28 @@ +/** + * SqlInjectionATM.ql + * + * Version of the boosted SQL injection query with an output relation ready to plug into the + * evaluation pipeline. + */ + +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.SqlInjectionATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + getScoreForFlow(source, sink) = score +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjectionATMLite.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjectionATMLite.ql new file mode 100644 index 00000000000..2d07af7a317 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/SqlInjectionATMLite.ql @@ -0,0 +1,29 @@ +/** + * SqlInjectionATMLite.ql + * + * Arbitrarily ranked version of the boosted SQL injection query with an output relation ready to + * plug into the evaluation pipeline. This is useful (a) for evaluating the performance of endpoint + * filters, and (b) as a baseline to compare the model against. + */ + +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.SqlInjectionATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + score = 0 +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPath.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPath.ql new file mode 100644 index 00000000000..3289d743352 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPath.ql @@ -0,0 +1,24 @@ +/** + * TaintedPath.ql + * + * Version of the standard path injection query with an output relation ready to plug into the + * evaluation pipeline. + */ + +import semmle.javascript.security.dataflow.TaintedPath +import EndToEndEvaluation as EndToEndEvaluation + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource +where + cfg instanceof TaintedPath::Configuration and + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPathATM.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPathATM.ql new file mode 100644 index 00000000000..b4fc49a6eb6 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPathATM.ql @@ -0,0 +1,28 @@ +/** + * TaintedPathATM.ql + * + * Version of the boosted path injection query with an output relation ready to plug into the + * evaluation pipeline. + */ + +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.TaintedPathATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + getScoreForFlow(source, sink) = score +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPathATMLite.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPathATMLite.ql new file mode 100644 index 00000000000..74ff55e72a6 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/TaintedPathATMLite.ql @@ -0,0 +1,29 @@ +/** + * TaintedPathATMLite.ql + * + * Arbitrarily ranked version of the boosted path injection query with an output relation ready to + * plug into the evaluation pipeline. This is useful (a) for evaluating the performance of endpoint + * filters, and (b) as a baseline to compare the model against. + */ + +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.TaintedPathATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + score = 0 +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/Xss.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/Xss.ql new file mode 100644 index 00000000000..fb5849c201f --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/Xss.ql @@ -0,0 +1,24 @@ +/** + * Xss.ql + * + * Version of the standard XSS query with an output relation ready to plug into the evaluation + * pipeline. + */ + +import semmle.javascript.security.dataflow.DomBasedXss +import EndToEndEvaluation as EndToEndEvaluation + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource +where + cfg instanceof DomBasedXss::Configuration and + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/XssATM.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/XssATM.ql new file mode 100644 index 00000000000..2db5d017bb9 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/XssATM.ql @@ -0,0 +1,29 @@ +/** + * XssATM.ql + * + * Version of the boosted XSS query with an output relation ready to plug into the evaluation + * pipeline. + */ + +import javascript +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.XssATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + getScoreForFlow(source, sink) = score +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/XssATMLite.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/XssATMLite.ql new file mode 100644 index 00000000000..52f9ab68ea2 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/evaluation/XssATMLite.ql @@ -0,0 +1,30 @@ +/** + * XssATMLite.ql + * + * Arbitrarily ranked version of the boosted XSS query with an output relation ready to plug into + * the evaluation pipeline. This is useful (a) for evaluating the performance of endpoint filters, + * and (b) as a baseline to compare the model against. + */ + +import javascript +import ATM::ResultsInfo +import EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.XssATM + +from + DataFlow::Configuration cfg, DataFlow::Node source, DataFlow::Node sink, string filePathSink, + int startLineSink, int endLineSink, int startColumnSink, int endColumnSink, string filePathSource, + int startLineSource, int endLineSource, int startColumnSource, int endColumnSource, float score +where + cfg.hasFlow(source, sink) and + not EndToEndEvaluation::isFlowExcluded(source, sink) and + not isFlowLikelyInBaseQuery(source, sink) and + sink.hasLocationInfo(filePathSink, startLineSink, startColumnSink, endLineSink, endColumnSink) and + source + .hasLocationInfo(filePathSource, startLineSource, startColumnSource, endLineSource, + endColumnSource) and + score = 0 +select source, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + sink, startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink, score order by + score desc, startLineSource, startColumnSource, endLineSource, endColumnSource, filePathSource, + startLineSink, startColumnSink, endLineSink, endColumnSink, filePathSink diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/CountAlertsAndEndpoints.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/CountAlertsAndEndpoints.ql new file mode 100644 index 00000000000..23fdf7a2073 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/CountAlertsAndEndpoints.ql @@ -0,0 +1,26 @@ +/* + * For internal use only. + * + * [DEPRECATED] Counts alerts and sinks for JavaScript security queries. + * + * This query is deprecated due to the performance implications of bringing in data flow + * configurations from multiple queries. Instead use `CountSourcesAndSinks.ql` to count sinks for + * JavaScript security queries, and count alerts by running the standard or evaluation queries for + * each security vulnerability. + */ + +import semmle.javascript.security.dataflow.NosqlInjection +import semmle.javascript.security.dataflow.SqlInjection +import semmle.javascript.security.dataflow.TaintedPath +import semmle.javascript.security.dataflow.DomBasedXss + +int numAlerts(DataFlow::Configuration cfg) { + result = count(DataFlow::Node source, DataFlow::Node sink | cfg.hasFlow(source, sink)) +} + +select numAlerts(any(NosqlInjection::Configuration cfg)) as numNosqlAlerts, + numAlerts(any(SqlInjection::Configuration cfg)) as numSqlAlerts, + numAlerts(any(TaintedPath::Configuration cfg)) as numTaintedPathAlerts, + numAlerts(any(DomBasedXss::Configuration cfg)) as numXssAlerts, + count(NosqlInjection::Sink sink) as numNosqlSinks, count(SqlInjection::Sink sink) as numSqlSinks, + count(TaintedPath::Sink sink) as numTaintedPathSinks, count(DomBasedXss::Sink sink) as numXssSinks diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/CountSourcesAndSinks.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/CountSourcesAndSinks.ql new file mode 100644 index 00000000000..997c61bc096 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/CountSourcesAndSinks.ql @@ -0,0 +1,72 @@ +/* + * For internal use only. + * + * Counts sources and sinks for JavaScript security queries. + */ + +import javascript +import semmle.javascript.dataflow.Configuration +// javascript/ql/lib/semmle/javascript/security/dataflow$ ls *Query.qll | sed -e 's/\(.*\)Query.qll/import semmle.javascript.security.dataflow.\1Query as \1/' +import semmle.javascript.security.dataflow.BrokenCryptoAlgorithmQuery as BrokenCryptoAlgorithm +import semmle.javascript.security.dataflow.BuildArtifactLeakQuery as BuildArtifactLeak +import semmle.javascript.security.dataflow.CleartextLoggingQuery as CleartextLogging +import semmle.javascript.security.dataflow.CleartextStorageQuery as CleartextStorage +import semmle.javascript.security.dataflow.ClientSideUrlRedirectQuery as ClientSideUrlRedirect +import semmle.javascript.security.dataflow.CodeInjectionQuery as CodeInjection +import semmle.javascript.security.dataflow.CommandInjectionQuery as CommandInjection +import semmle.javascript.security.dataflow.ConditionalBypassQuery as ConditionalBypass +import semmle.javascript.security.dataflow.CorsMisconfigurationForCredentialsQuery as CorsMisconfigurationForCredentials +import semmle.javascript.security.dataflow.DeepObjectResourceExhaustionQuery as DeepObjectResourceExhaustion +import semmle.javascript.security.dataflow.DifferentKindsComparisonBypassQuery as DifferentKindsComparisonBypass +import semmle.javascript.security.dataflow.DomBasedXssQuery as DomBasedXss +import semmle.javascript.security.dataflow.ExceptionXssQuery as ExceptionXss +import semmle.javascript.security.dataflow.ExternalAPIUsedWithUntrustedDataQuery as ExternalAPIUsedWithUntrustedData +import semmle.javascript.security.dataflow.FileAccessToHttpQuery as FileAccessToHttp +import semmle.javascript.security.dataflow.HardcodedCredentialsQuery as HardcodedCredentials +import semmle.javascript.security.dataflow.HardcodedDataInterpretedAsCodeQuery as HardcodedDataInterpretedAsCode +import semmle.javascript.security.dataflow.HostHeaderPoisoningInEmailGenerationQuery as HostHeaderPoisoningInEmailGeneration +import semmle.javascript.security.dataflow.HttpToFileAccessQuery as HttpToFileAccess +import semmle.javascript.security.dataflow.ImproperCodeSanitizationQuery as ImproperCodeSanitization +import semmle.javascript.security.dataflow.IncompleteHtmlAttributeSanitizationQuery as IncompleteHtmlAttributeSanitization +import semmle.javascript.security.dataflow.IndirectCommandInjectionQuery as IndirectCommandInjection +import semmle.javascript.security.dataflow.InsecureDownloadQuery as InsecureDownload +import semmle.javascript.security.dataflow.InsecureRandomnessQuery as InsecureRandomness +import semmle.javascript.security.dataflow.InsufficientPasswordHashQuery as InsufficientPasswordHash +import semmle.javascript.security.dataflow.LogInjectionQuery as LogInjection +import semmle.javascript.security.dataflow.LoopBoundInjectionQuery as LoopBoundInjection +import semmle.javascript.security.dataflow.NosqlInjectionQuery as NosqlInjection +import semmle.javascript.security.dataflow.PostMessageStarQuery as PostMessageStar +import semmle.javascript.security.dataflow.PrototypePollutingAssignmentQuery as PrototypePollutingAssignment +import semmle.javascript.security.dataflow.PrototypePollutionQuery as PrototypePollution +import semmle.javascript.security.dataflow.ReflectedXssQuery as ReflectedXss +import semmle.javascript.security.dataflow.RegExpInjectionQuery as RegExpInjection +import semmle.javascript.security.dataflow.RemotePropertyInjectionQuery as RemotePropertyInjection +import semmle.javascript.security.dataflow.RequestForgeryQuery as RequestForgery +import semmle.javascript.security.dataflow.ServerSideUrlRedirectQuery as ServerSideUrlRedirect +import semmle.javascript.security.dataflow.ShellCommandInjectionFromEnvironmentQuery as ShellCommandInjectionFromEnvironment +import semmle.javascript.security.dataflow.SqlInjectionQuery as SqlInjection +import semmle.javascript.security.dataflow.StackTraceExposureQuery as StackTraceExposure +import semmle.javascript.security.dataflow.StoredXssQuery as StoredXss +import semmle.javascript.security.dataflow.TaintedFormatStringQuery as TaintedFormatString +import semmle.javascript.security.dataflow.TaintedPathQuery as TaintedPath +import semmle.javascript.security.dataflow.TemplateObjectInjectionQuery as TemplateObjectInjection +import semmle.javascript.security.dataflow.TypeConfusionThroughParameterTamperingQuery as TypeConfusionThroughParameterTampering +import semmle.javascript.security.dataflow.UnsafeDeserializationQuery as UnsafeDeserialization +import semmle.javascript.security.dataflow.UnsafeDynamicMethodAccessQuery as UnsafeDynamicMethodAccess +import semmle.javascript.security.dataflow.UnsafeHtmlConstructionQuery as UnsafeHtmlConstruction +import semmle.javascript.security.dataflow.UnsafeJQueryPluginQuery as UnsafeJQueryPlugin +import semmle.javascript.security.dataflow.UnsafeShellCommandConstructionQuery as UnsafeShellCommandConstruction +import semmle.javascript.security.dataflow.UnvalidatedDynamicMethodCallQuery as UnvalidatedDynamicMethodCall +import semmle.javascript.security.dataflow.XmlBombQuery as XmlBomb +import semmle.javascript.security.dataflow.XpathInjectionQuery as XpathInjection +import semmle.javascript.security.dataflow.XssThroughDomQuery as XssThroughDom +import semmle.javascript.security.dataflow.XxeQuery as Xxe +import semmle.javascript.security.dataflow.ZipSlipQuery as ZipSlip + +DataFlow::Node getASink(Configuration cfg) { cfg.isSink(result) or cfg.isSink(result, _) } + +DataFlow::Node getASource(Configuration cfg) { cfg.isSource(result) or cfg.isSource(result, _) } + +from Configuration cfg, int sources, int sinks +where count(getASource(cfg)) = sources and count(getASink(cfg)) = sinks +select cfg, sources, sinks diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Exclusions.qll b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Exclusions.qll new file mode 100644 index 00000000000..79d3486e2db --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Exclusions.qll @@ -0,0 +1,49 @@ +/* + * For internal use only. + * + * Defines files that should be excluded from the evaluation of ML models. + */ + +private import javascript +private import semmle.javascript.filters.ClassifyFiles as ClassifyFiles + +/** Holds if the file should be excluded from end-to-end evaluation. */ +predicate isFileExcluded(File file) { + // Ignore files that are outside the root folder of the analyzed source location. + // + // If the file doesn't have a relative path, then the source file is located outside the root + // folder of the analyzed source location, meaning that the files are additional files added to + // the database like standard library files that we would like to ignore. + not exists(file.getRelativePath()) + or + // Ignore files based on their path. + exists(string ignorePattern, string separator | + ignorePattern = + // Exclude test files + "(tests?|test[_-]?case|" + + // Exclude library files + // + // - The Bower and npm package managers store packages in bower_components and node_modules + // folders respectively. + // - Specific exclusion for end-to-end: `applications/examples/static/epydoc` contains + // library code from Epydoc. + "3rd[_-]?party|bower_components|extern(s|al)?|node_modules|resources|third[_-]?party|_?vendor|" + + "applications" + separator + "examples" + separator + "static" + separator + "epydoc|" + + // Exclude generated code + "gen|\\.?generated|" + + // Exclude benchmarks + "benchmarks?|" + + // Exclude documentation + "docs?|documentation)" and + separator = "(\\/|\\.)" and + exists( + file.getRelativePath() + .toLowerCase() + .regexpFind(separator + ignorePattern + separator + "|" + "^" + ignorePattern + separator + + "|" + separator + ignorePattern + "$", _, _) + ) + ) + or + // Ignore externs, generated, library, and test files. + ClassifyFiles::classify(file, ["externs", "generated", "library", "test"]) +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointData.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointData.ql new file mode 100644 index 00000000000..73dab4af324 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointData.ql @@ -0,0 +1,11 @@ +/* + * For internal use only. + * + * Extracts training and evaluation data we can use to train ML models for ML-powered queries. + */ + +import ExtractEndpointData as ExtractEndpointData + +query predicate endpoints = ExtractEndpointData::endpoints/5; + +query predicate tokenFeatures = ExtractEndpointData::tokenFeatures/3; diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointData.qll b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointData.qll new file mode 100644 index 00000000000..bea47423797 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointData.qll @@ -0,0 +1,195 @@ +/* + * For internal use only. + * + * Library code for training and evaluation data we can use to train ML models for ML-powered + * queries. + */ + +import javascript +import Exclusions as Exclusions +import evaluation.EndToEndEvaluation as EndToEndEvaluation +import experimental.adaptivethreatmodeling.ATMConfig +import experimental.adaptivethreatmodeling.CoreKnowledge as CoreKnowledge +import experimental.adaptivethreatmodeling.EndpointFeatures as EndpointFeatures +import experimental.adaptivethreatmodeling.EndpointScoring as EndpointScoring +import experimental.adaptivethreatmodeling.EndpointTypes +import experimental.adaptivethreatmodeling.FilteringReasons +import experimental.adaptivethreatmodeling.NosqlInjectionATM as NosqlInjectionATM +import experimental.adaptivethreatmodeling.SqlInjectionATM as SqlInjectionATM +import experimental.adaptivethreatmodeling.TaintedPathATM as TaintedPathATM +import experimental.adaptivethreatmodeling.XssATM as XssATM +import Labels +import NoFeaturizationRestrictionsConfig +import Queries + +/** Gets the ATM configuration object for the specified query. */ +ATMConfig getATMCfg(Query query) { + query instanceof NosqlInjectionQuery and + result instanceof NosqlInjectionATM::NosqlInjectionATMConfig + or + query instanceof SqlInjectionQuery and result instanceof SqlInjectionATM::SqlInjectionATMConfig + or + query instanceof TaintedPathQuery and result instanceof TaintedPathATM::TaintedPathATMConfig + or + query instanceof XssQuery and result instanceof XssATM::DomBasedXssATMConfig +} + +/** Gets the ATM data flow configuration for the specified query. */ +DataFlow::Configuration getDataFlowCfg(Query query) { + query instanceof NosqlInjectionQuery and result instanceof NosqlInjectionATM::Configuration + or + query instanceof SqlInjectionQuery and result instanceof SqlInjectionATM::Configuration + or + query instanceof TaintedPathQuery and result instanceof TaintedPathATM::Configuration + or + query instanceof XssQuery and result instanceof XssATM::Configuration +} + +/** Gets a known sink for the specified query. */ +private DataFlow::Node getASink(Query query) { + getATMCfg(query).isKnownSink(result) and + // Only consider the source code for the project being analyzed. + exists(result.getFile().getRelativePath()) +} + +/** Gets a data flow node that is known not to be a sink for the specified query. */ +private DataFlow::Node getANotASink(NotASinkReason reason) { + CoreKnowledge::isOtherModeledArgument(result, reason) and + // Some endpoints can be assigned both a `NotASinkReason` and a `LikelyNotASinkReason`. We + // consider these endpoints to be `LikelyNotASink`, therefore this line excludes them from the + // definition of `NotASink`. + not CoreKnowledge::isOtherModeledArgument(result, any(LikelyNotASinkReason t)) and + not result = getASink(_) and + // Only consider the source code for the project being analyzed. + exists(result.getFile().getRelativePath()) +} + +/** + * Gets a data flow node whose label is unknown for the specified query. + * + * In other words, this is an endpoint that is not `Sink`, `NotASink`, or `LikelyNotASink` for the + * specified query. + */ +private DataFlow::Node getAnUnknown(Query query) { + ( + getATMCfg(query).isEffectiveSink(result) or + getATMCfg(query).isEffectiveSinkWithOverridingScore(result, _, _) + ) and + not result = getASink(query) and + // Only consider the source code for the project being analyzed. + exists(result.getFile().getRelativePath()) +} + +/** Gets the query-specific sink label for the given endpoint, if such a label exists. */ +private EndpointLabel getSinkLabelForEndpoint(DataFlow::Node endpoint, Query query) { + endpoint = getASink(query) and result instanceof SinkLabel + or + endpoint = getANotASink(_) and result instanceof NotASinkLabel + or + endpoint = getAnUnknown(query) and result instanceof UnknownLabel +} + +/** Gets an endpoint that should be extracted. */ +DataFlow::Node getAnEndpoint(Query query) { exists(getSinkLabelForEndpoint(result, query)) } + +/** + * Endpoints and associated metadata. + * + * Note that we draw a distinction between _features_, that are provided to the model at training + * and query time, and _metadata_, that is only provided to the model at training time. + * + * Internal: See the design document for + * [extensible extraction queries](https://docs.google.com/document/d/1g3ci2Nf1hGMG6ZUP0Y4PqCy_8elcoC_dhBvgTxdAWpg) + * for technical information about the design of this predicate. + */ +predicate endpoints( + DataFlow::Node endpoint, string queryName, string key, string value, string valueType +) { + exists(Query query | + // Only provide metadata for labelled endpoints, since we do not extract all endpoints. + endpoint = getAnEndpoint(query) and + queryName = query.getName() and + ( + // Holds if there is a taint flow path from a known source to the endpoint + key = "hasFlowFromSource" and + ( + if FlowFromSource::hasFlowFromSource(endpoint, query) + then value = "true" + else value = "false" + ) and + valueType = "boolean" + or + // Constant expressions always evaluate to a constant primitive value. Therefore they can't ever + // appear in an alert, making them less interesting training examples. + key = "isConstantExpression" and + (if endpoint.asExpr() instanceof ConstantExpr then value = "true" else value = "false") and + valueType = "boolean" + or + // Holds if alerts involving the endpoint are excluded from the end-to-end evaluation. + key = "isExcludedFromEndToEndEvaluation" and + (if Exclusions::isFileExcluded(endpoint.getFile()) then value = "true" else value = "false") and + valueType = "boolean" + or + // The label for this query, considering the endpoint as a sink. + key = "sinkLabel" and + value = getSinkLabelForEndpoint(endpoint, query).getEncoding() and + valueType = "string" + or + // The reason, or reasons, why the endpoint was labeled NotASink for this query. + key = "notASinkReason" and + exists(FilteringReason reason | + endpoint = getANotASink(reason) and + value = reason.getDescription() + ) and + valueType = "string" + ) + ) +} + +/** + * `EndpointFeatures::tokenFeatures` has no results when `featureName` is absent for the endpoint + * `endpoint`. To preserve compatibility with the data pipeline, this relation will instead set + * `featureValue` to the empty string in this case. + */ +predicate tokenFeatures(DataFlow::Node endpoint, string featureName, string featureValue) { + endpoints(endpoint, _, _, _, _) and + ( + EndpointFeatures::tokenFeatures(endpoint, featureName, featureValue) + or + // Performance note: this creates a Cartesian product between `endpoint` and `featureName`. + featureName = EndpointFeatures::getASupportedFeatureName() and + not exists(string value | EndpointFeatures::tokenFeatures(endpoint, featureName, value)) and + featureValue = "" + ) +} + +module FlowFromSource { + predicate hasFlowFromSource(DataFlow::Node endpoint, Query q) { + exists(Configuration cfg | cfg.getQuery() = q | cfg.hasFlow(_, endpoint)) + } + + /** + * A data flow configuration that replicates the data flow configuration for a specific query, but + * replaces the set of sinks with the set of endpoints we're extracting. + * + * We use this to find out when there is flow to a particular endpoint from a known source. + * + * This configuration behaves in a very similar way to the `ForwardExploringConfiguration` class + * from the CodeQL standard libraries for JavaScript. + */ + private class Configuration extends DataFlow::Configuration { + Query q; + + Configuration() { this = getDataFlowCfg(q) } + + Query getQuery() { result = q } + + /** The sinks are the endpoints we're extracting. */ + override predicate isSink(DataFlow::Node sink) { sink = getAnEndpoint(q) } + + /** The sinks are the endpoints we're extracting. */ + override predicate isSink(DataFlow::Node sink, DataFlow::FlowLabel lbl) { + sink = getAnEndpoint(q) + } + } +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointDataEvaluation.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointDataEvaluation.ql new file mode 100644 index 00000000000..52885baec9b --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointDataEvaluation.ql @@ -0,0 +1,25 @@ +/* + * For internal use only. + * + * Extracts evaluation data we can use to evaluate ML models for ML-powered queries. + */ + +import javascript +import ExtractEndpointData as ExtractEndpointData + +query predicate endpoints( + DataFlow::Node endpoint, string queryName, string key, string value, string valueType +) { + ExtractEndpointData::endpoints(endpoint, queryName, key, value, valueType) and + // only select endpoints that are either Sink, NotASink or Unknown + ExtractEndpointData::endpoints(endpoint, queryName, "sinkLabel", ["Sink", "NotASink", "Unknown"], + "string") and + // do not select endpoints filtered out by end-to-end evaluation + ExtractEndpointData::endpoints(endpoint, queryName, "isExcludedFromEndToEndEvaluation", "false", + "boolean") +} + +query predicate tokenFeatures(DataFlow::Node endpoint, string featureName, string featureValue) { + endpoints(endpoint, _, _, _, _) and + ExtractEndpointData::tokenFeatures(endpoint, featureName, featureValue) +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointDataTraining.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointDataTraining.ql new file mode 100644 index 00000000000..20ece497585 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointDataTraining.ql @@ -0,0 +1,26 @@ +/* + * For internal use only. + * + * Extracts training data we can use to train ML models for ML-powered queries. + */ + +import javascript +import ExtractEndpointData as ExtractEndpointData + +query predicate endpoints( + DataFlow::Node endpoint, string queryName, string key, string value, string valueType +) { + ExtractEndpointData::endpoints(endpoint, queryName, key, value, valueType) and + // only select endpoints that are either Sink or NotASink + ExtractEndpointData::endpoints(endpoint, queryName, "sinkLabel", ["Sink", "NotASink"], "string") and + // do not select endpoints filtered out by end-to-end evaluation + ExtractEndpointData::endpoints(endpoint, queryName, "isExcludedFromEndToEndEvaluation", "false", + "boolean") and + // only select endpoints that can be part of a tainted flow + ExtractEndpointData::endpoints(endpoint, queryName, "isConstantExpression", "false", "boolean") +} + +query predicate tokenFeatures(DataFlow::Node endpoint, string featureName, string featureValue) { + endpoints(endpoint, _, _, _, _) and + ExtractEndpointData::tokenFeatures(endpoint, featureName, featureValue) +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointLabelEncoding.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointLabelEncoding.ql new file mode 100644 index 00000000000..298757fcb4c --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractEndpointLabelEncoding.ql @@ -0,0 +1,11 @@ +/** + * @name Endpoint types + * @description Maps endpoint type encodings to human-readable descriptions. + * @kind table + * @id js/ml-powered/model-building/endpoint-type-encodings + */ + +import experimental.adaptivethreatmodeling.EndpointTypes + +from EndpointType type +select type.getEncoding() as encoding, type.getDescription() as description order by encoding diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractMisclassifiedEndpointFeatures.ql b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractMisclassifiedEndpointFeatures.ql new file mode 100644 index 00000000000..95fa096fee4 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/ExtractMisclassifiedEndpointFeatures.ql @@ -0,0 +1,44 @@ +/* + * For internal use only. + * + * Query for finding misclassified endpoints which we can use to debug ML-powered queries. + */ + +import javascript +import experimental.adaptivethreatmodeling.AdaptiveThreatModeling +import experimental.adaptivethreatmodeling.ATMConfig +import experimental.adaptivethreatmodeling.BaseScoring +import experimental.adaptivethreatmodeling.EndpointFeatures as EndpointFeatures +import experimental.adaptivethreatmodeling.EndpointTypes +import semmle.javascript.security.dataflow.NosqlInjectionCustomizations + +/** The positive endpoint type for which you wish to find misclassified examples. */ +EndpointType getEndpointType() { result instanceof NosqlInjectionSinkType } + +/** Get a positive endpoint. This will be run through the classifier to determine whether it is misclassified. */ +DataFlow::Node getAPositiveEndpoint() { result instanceof NosqlInjection::Sink } + +/** An ATM configuration to find misclassified endpoints of type `getEndpointType()`. */ +class ExtractMisclassifiedEndpointsATMConfig extends ATMConfig { + ExtractMisclassifiedEndpointsATMConfig() { this = "ExtractMisclassifiedEndpointsATMConfig" } + + override predicate isEffectiveSink(DataFlow::Node sinkCandidate) { + sinkCandidate = getAPositiveEndpoint() + } + + override EndpointType getASinkEndpointType() { result = getEndpointType() } +} + +/** Get an endpoint from `getAPositiveEndpoint()` that is incorrectly excluded from the results. */ +DataFlow::Node getAMisclassifedEndpoint() { + any(ExtractMisclassifiedEndpointsATMConfig config).isEffectiveSink(result) and + not any(ScoringResults results).shouldResultBeIncluded(_, result) +} + +/** The token features for each misclassified endpoint. */ +query predicate tokenFeaturesForMisclassifiedEndpoints( + DataFlow::Node endpoint, string featureName, string featureValue +) { + endpoint = getAMisclassifedEndpoint() and + EndpointFeatures::tokenFeatures(endpoint, featureName, featureValue) +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Labels.qll b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Labels.qll new file mode 100644 index 00000000000..85ced189b30 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Labels.qll @@ -0,0 +1,29 @@ +/* + * For internal use only. + * + * Labels used in training and evaluation data to indicate knowledge about whether an endpoint is a + * sink for a particular security query. + */ + +newtype TEndpointLabel = + TSinkLabel() or + TNotASinkLabel() or + TUnknownLabel() + +abstract class EndpointLabel extends TEndpointLabel { + abstract string getEncoding(); + + string toString() { result = getEncoding() } +} + +class SinkLabel extends EndpointLabel, TSinkLabel { + override string getEncoding() { result = "Sink" } +} + +class NotASinkLabel extends EndpointLabel, TNotASinkLabel { + override string getEncoding() { result = "NotASink" } +} + +class UnknownLabel extends EndpointLabel, TUnknownLabel { + override string getEncoding() { result = "Unknown" } +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/NoFeaturizationRestrictionsConfig.qll b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/NoFeaturizationRestrictionsConfig.qll new file mode 100644 index 00000000000..c2d9a0e1d21 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/NoFeaturizationRestrictionsConfig.qll @@ -0,0 +1,16 @@ +/* + * For internal use only. + */ + +private import experimental.adaptivethreatmodeling.FeaturizationConfig + +/** + * A featurization config that featurizes all endpoints. + * + * This should only be used in extraction queries and tests. + */ +class NoRestrictionsFeaturizationConfig extends FeaturizationConfig { + NoRestrictionsFeaturizationConfig() { this = "NoRestrictionsFeaturization" } + + override DataFlow::Node getAnEndpointToFeaturize() { any() } +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Queries.qll b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Queries.qll new file mode 100644 index 00000000000..51dd3ffec84 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/extraction/Queries.qll @@ -0,0 +1,33 @@ +/* + * For internal use only. + * + * Represents the security queries for which we currently have ML-powered versions. + */ + +newtype TQuery = + TNosqlInjectionQuery() or + TSqlInjectionQuery() or + TTaintedPathQuery() or + TXssQuery() + +abstract class Query extends TQuery { + abstract string getName(); + + string toString() { result = getName() } +} + +class NosqlInjectionQuery extends Query, TNosqlInjectionQuery { + override string getName() { result = "NosqlInjection" } +} + +class SqlInjectionQuery extends Query, TSqlInjectionQuery { + override string getName() { result = "SqlInjection" } +} + +class TaintedPathQuery extends Query, TTaintedPathQuery { + override string getName() { result = "TaintedPath" } +} + +class XssQuery extends Query, TXssQuery { + override string getName() { result = "Xss" } +} diff --git a/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml new file mode 100644 index 00000000000..3063b150d0d --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/modelbuilding/qlpack.yml @@ -0,0 +1,8 @@ +name: codeql/javascript-experimental-atm-model-building +extractor: javascript +library: false +groups: + - javascript + - experimental +dependencies: + codeql/javascript-experimental-atm-lib: "*" diff --git a/javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/EndpointFeatures.expected b/javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/EndpointFeatures.expected new file mode 100644 index 00000000000..45758ff0bd0 --- /dev/null +++ b/javascript/ql/experimental/adaptivethreatmodeling/test/endpoint_large_scale/EndpointFeatures.expected @@ -0,0 +1,16711 @@ +tokenFeatures +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:3:25:3:33 | "express" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:3:25:3:33 | "express" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:3:25:3:33 | "express" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:3:25:3:33 | "express" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:4:28:4:40 | "body-parser" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:4:28:4:40 | "body-parser" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:4:28:4:40 | "body-parser" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:4:28:4:40 | "body-parser" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:10:9:10:25 | bodyParser.json() | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:10:9:10:25 | bodyParser.json() | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:10:9:10:25 | bodyParser.json() | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:10:9:10:25 | bodyParser.json() | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:10:9:10:25 | bodyParser.json() | calleeName | use | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:10:9:10:25 | bodyParser.json() | receiverName | app | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:10:12:16 | "/find" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:10:12:16 | "/find" | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:10:12:16 | "/find" | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:10:12:16 | "/find" | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:10:12:16 | "/find" | calleeName | post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:10:12:16 | "/find" | receiverName | app | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:19:15:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:19:15:1 | (req, r ... OT OK\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:19:15:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:19:15:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:19:15:1 | (req, r ... OT OK\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:12:19:15:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | calleeName | parse | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | enclosingFunctionBody | req res v JSON parse req body x getCollection find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:13:22:13:31 | req.body.x | receiverName | JSON | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } | enclosingFunctionBody | req res v JSON parse req body x getCollection find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:24:14:32 | { id: v } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v | enclosingFunctionBody | req res v JSON parse req body x getCollection find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:14:30:14:30 | v | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:10:20:16 | "/find" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:10:20:16 | "/find" | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:10:20:16 | "/find" | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:10:20:16 | "/find" | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:10:20:16 | "/find" | calleeName | post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:10:20:16 | "/find" | receiverName | app | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:19:24:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:19:24:1 | (req, r ... OT OK\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:19:24:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:19:24:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:19:24:1 | (req, r ... OT OK\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:20:19:24:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | calleeName | parse | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | enclosingFunctionBody | req res v JSON parse req body x getMongooseModel find id v getMongooseQuery find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:21:22:21:31 | req.body.x | receiverName | JSON | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } | enclosingFunctionBody | req res v JSON parse req body x getMongooseModel find id v getMongooseQuery find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:27:22:35 | { id: v } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v | enclosingFunctionBody | req res v JSON parse req body x getMongooseModel find id v getMongooseQuery find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:22:33:22:33 | v | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } | enclosingFunctionBody | req res v JSON parse req body x getMongooseModel find id v getMongooseQuery find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:27:23:35 | { id: v } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v | enclosingFunctionBody | req res v JSON parse req body x getMongooseModel find id v getMongooseQuery find id v | +| autogenerated/NosqlAndSqlInjection/typed/typedClient.ts:23:33:23:33 | v | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:1:24:1:32 | "mongodb" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:1:24:1:32 | "mongodb" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:1:24:1:32 | "mongodb" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:1:24:1:32 | "mongodb" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | enclosingFunctionBody | fn dbClient connect process env DB_URL err client db client db process env DB_NAME fn err | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | enclosingFunctionName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:22:8:39 | process.env.DB_URL | receiverName | dbClient | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | enclosingFunctionBody | fn dbClient connect process env DB_URL err client db client db process env DB_NAME fn err | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | enclosingFunctionName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:42:8:43 | {} | receiverName | dbClient | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | enclosingFunctionBody | fn dbClient connect process env DB_URL err client db client db process env DB_NAME fn err | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | enclosingFunctionName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:8:46:11:5 | (err, c ... ;\\n } | receiverName | dbClient | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | calleeAccessPath | mongodb MongoClient connect client db | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | calleeName | db | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | enclosingFunctionBody | fn dbClient connect process env DB_URL err client db client db process env DB_NAME fn err | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | enclosingFunctionName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:9:22:9:40 | process.env.DB_NAME | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:10:17:10:19 | err | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:10:17:10:19 | err | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:10:17:10:19 | err | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:10:17:10:19 | err | calleeName | fn | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:10:17:10:19 | err | enclosingFunctionBody | fn dbClient connect process env DB_URL err client db client db process env DB_NAME fn err | +| autogenerated/NosqlAndSqlInjection/untyped/dbo.js:10:17:10:19 | err | enclosingFunctionName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:15:33:15:38 | schema | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:15:33:15:38 | schema | calleeAccessPath | ajv compile | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:15:33:15:38 | schema | calleeAccessPathWithStructuralInfo | ajv instanceorreturn member compile instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:15:33:15:38 | schema | calleeApiName | ajv | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:15:33:15:38 | schema | calleeName | compile | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:15:33:15:38 | schema | receiverName | ajv | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:10:21:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:10:21:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:10:21:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:10:21:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:10:21:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:10:21:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:29:37:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:29:37:1 | (req, r ... });\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:29:37:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:29:37:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:29:37:1 | (req, r ... });\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:21:29:37:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:25:22:56 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:22:59:36:5 | (err, d ... K\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:23:33:23:37 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:23:25:48 | JSON.pa ... y.data) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | calleeName | parse | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:25:34:25:47 | req.query.data | receiverName | JSON | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | calleeAccessPath | ajv compile | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | calleeAccessPathWithStructuralInfo | ajv instanceorreturn member compile instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | calleeApiName | ajv | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | calleeName | checkSchema | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:26:25:26:29 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:27:22:27:26 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:30:22:30:26 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:33:22:33:26 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | enclosingFunctionBody | req res MongoClient connect mongodb://localhost:27017/test err db doc db collection doc query JSON parse req query data checkSchema query doc find query ajv validate schema query doc find query validate query doc find query doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/json-schema-validator.js:35:18:35:22 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-from.js:1:24:1:31 | "marsdb" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-from.js:1:24:1:31 | "marsdb" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-from.js:1:24:1:31 | "marsdb" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-from.js:1:24:1:31 | "marsdb" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:1:25:1:33 | "express" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:1:25:1:33 | "express" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:1:25:1:33 | "express" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:1:25:1:33 | "express" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:2:28:2:40 | "body-parser" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:2:28:2:40 | "body-parser" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:2:28:2:40 | "body-parser" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:2:28:2:40 | "body-parser" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:3:20:3:39 | './marsdb-flow-from' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:3:20:3:39 | './marsdb-flow-from' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:3:20:3:39 | './marsdb-flow-from' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:3:20:3:39 | './marsdb-flow-from' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:9:7:49 | bodyPar ... true }) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:9:7:49 | bodyPar ... true }) | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:9:7:49 | bodyPar ... true }) | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:9:7:49 | bodyPar ... true }) | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:9:7:49 | bodyPar ... true }) | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:9:7:49 | bodyPar ... true }) | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:31:7:48 | { extended: true } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:31:7:48 | { extended: true } | calleeAccessPath | body-parser urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:31:7:48 | { extended: true } | calleeAccessPathWithStructuralInfo | body-parser member urlencoded instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:31:7:48 | { extended: true } | calleeApiName | body-parser | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:31:7:48 | { extended: true } | calleeName | urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:31:7:48 | { extended: true } | receiverName | bodyParser | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:43:7:46 | true | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:7:43:7:46 | true | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:10:9:26 | "/documents/find" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:10:9:26 | "/documents/find" | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:10:9:26 | "/documents/find" | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:10:9:26 | "/documents/find" | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:10:9:26 | "/documents/find" | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:10:9:26 | "/documents/find" | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:29:15:1 | (req, r ... ery);\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:29:15:1 | (req, r ... ery);\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:29:15:1 | (req, r ... ery);\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:29:15:1 | (req, r ... ery);\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:29:15:1 | (req, r ... ery);\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:9:29:15:1 | (req, r ... ery);\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:10:17:10:18 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:10:17:10:18 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:10:17:10:18 | {} | enclosingFunctionBody | req res query query title req body title db myDoc find query | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:10:17:10:18 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | calleeAccessPath | marsdb Collection find | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | calleeAccessPathWithStructuralInfo | marsdb member Collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | calleeApiName | marsdb | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | enclosingFunctionBody | req res query query title req body title db myDoc find query | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb-flow-to.js:14:17:14:21 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:1:25:1:33 | "express" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:1:25:1:33 | "express" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:1:25:1:33 | "express" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:1:25:1:33 | "express" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:2:20:2:27 | "marsdb" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:2:20:2:27 | "marsdb" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:2:20:2:27 | "marsdb" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:2:20:2:27 | "marsdb" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:3:24:3:36 | "body-parser" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:3:24:3:36 | "body-parser" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:3:24:3:36 | "body-parser" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:3:24:3:36 | "body-parser" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:9:9:49 | bodyPar ... true }) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:9:9:49 | bodyPar ... true }) | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:9:9:49 | bodyPar ... true }) | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:9:9:49 | bodyPar ... true }) | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:9:9:49 | bodyPar ... true }) | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:9:9:49 | bodyPar ... true }) | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:31:9:48 | { extended: true } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:31:9:48 | { extended: true } | calleeAccessPath | body-parser urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:31:9:48 | { extended: true } | calleeAccessPathWithStructuralInfo | body-parser member urlencoded instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:31:9:48 | { extended: true } | calleeApiName | body-parser | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:31:9:48 | { extended: true } | calleeName | urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:31:9:48 | { extended: true } | receiverName | bodyParser | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:43:9:46 | true | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:9:43:9:46 | true | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:10:11:26 | "/documents/find" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:10:11:26 | "/documents/find" | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:10:11:26 | "/documents/find" | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:10:11:26 | "/documents/find" | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:10:11:26 | "/documents/find" | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:10:11:26 | "/documents/find" | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:29:17:1 | (req, r ... ery);\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:29:17:1 | (req, r ... ery);\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:29:17:1 | (req, r ... ery);\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:29:17:1 | (req, r ... ery);\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:29:17:1 | (req, r ... ery);\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:11:29:17:1 | (req, r ... ery);\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:12:17:12:18 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:12:17:12:18 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:12:17:12:18 | {} | enclosingFunctionBody | req res query query title req body title doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:12:17:12:18 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | calleeAccessPath | marsdb Collection find | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | calleeAccessPathWithStructuralInfo | marsdb member Collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | calleeApiName | marsdb | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | enclosingFunctionBody | req res query query title req body title doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/marsdb.js:16:12:16:16 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:1:25:1:33 | "express" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:1:25:1:33 | "express" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:1:25:1:33 | "express" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:1:25:1:33 | "express" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:2:23:2:33 | "minimongo" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:2:23:2:33 | "minimongo" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:2:23:2:33 | "minimongo" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:2:23:2:33 | "minimongo" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:3:24:3:36 | "body-parser" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:3:24:3:36 | "body-parser" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:3:24:3:36 | "body-parser" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:3:24:3:36 | "body-parser" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:9:11:49 | bodyPar ... true }) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:9:11:49 | bodyPar ... true }) | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:9:11:49 | bodyPar ... true }) | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:9:11:49 | bodyPar ... true }) | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:9:11:49 | bodyPar ... true }) | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:9:11:49 | bodyPar ... true }) | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:31:11:48 | { extended: true } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:31:11:48 | { extended: true } | calleeAccessPath | body-parser urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:31:11:48 | { extended: true } | calleeAccessPathWithStructuralInfo | body-parser member urlencoded instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:31:11:48 | { extended: true } | calleeApiName | body-parser | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:31:11:48 | { extended: true } | calleeName | urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:31:11:48 | { extended: true } | receiverName | bodyParser | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:43:11:46 | true | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:11:43:11:46 | true | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:10:13:26 | "/documents/find" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:10:13:26 | "/documents/find" | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:10:13:26 | "/documents/find" | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:10:13:26 | "/documents/find" | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:10:13:26 | "/documents/find" | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:10:13:26 | "/documents/find" | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:29:19:1 | (req, r ... ery);\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:29:19:1 | (req, r ... ery);\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:29:19:1 | (req, r ... ery);\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:29:19:1 | (req, r ... ery);\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:29:19:1 | (req, r ... ery);\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:13:29:19:1 | (req, r ... ery);\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:14:17:14:18 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:14:17:14:18 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:14:17:14:18 | {} | enclosingFunctionBody | req res query query title req body title doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:14:17:14:18 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | calleeAccessPath | minimongo MemoryDb myDocs find | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | calleeAccessPathWithStructuralInfo | minimongo member MemoryDb instanceorreturn member myDocs member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | calleeApiName | minimongo | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | enclosingFunctionBody | req res query query title req body title doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/minimongo.js:18:12:18:16 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:1:25:1:33 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:1:25:1:33 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:1:25:1:33 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:1:25:1:33 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:2:25:2:33 | 'mongodb' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:2:25:2:33 | 'mongodb' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:2:25:2:33 | 'mongodb' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:2:25:2:33 | 'mongodb' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:3:28:3:40 | 'body-parser' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:3:28:3:40 | 'body-parser' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:3:28:3:40 | 'body-parser' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:3:28:3:40 | 'body-parser' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:9:9:49 | bodyPar ... true }) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:9:9:49 | bodyPar ... true }) | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:9:9:49 | bodyPar ... true }) | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:9:9:49 | bodyPar ... true }) | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:9:9:49 | bodyPar ... true }) | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:9:9:49 | bodyPar ... true }) | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:31:9:48 | { extended: true } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:31:9:48 | { extended: true } | calleeAccessPath | body-parser urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:31:9:48 | { extended: true } | calleeAccessPathWithStructuralInfo | body-parser member urlencoded instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:31:9:48 | { extended: true } | calleeApiName | body-parser | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:31:9:48 | { extended: true } | calleeName | urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:31:9:48 | { extended: true } | receiverName | bodyParser | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:43:9:46 | true | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:9:43:9:46 | true | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:10:11:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:10:11:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:10:11:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:10:11:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:10:11:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:10:11:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:29:35:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:29:35:1 | (req, r ... });\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:29:35:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:29:35:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:29:35:1 | (req, r ... });\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:11:29:35:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:12:19:12:20 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:12:19:12:20 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:12:19:12:20 | {} | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:12:19:12:20 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:25:14:56 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:14:59:34:5 | (err, d ... }\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:15:31:15:35 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:18:16:18:20 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:16:21:47 | { title ... title } | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:25:21:45 | '' + qu ... y.title | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:25:21:45 | '' + qu ... y.title | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:25:21:45 | '' + qu ... y.title | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:21:25:21:45 | '' + qu ... y.title | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:16:24:52 | { title ... tr(1) } | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:25:24:50 | query.b ... bstr(1) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:25:24:50 | query.b ... bstr(1) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:25:24:50 | query.b ... bstr(1) | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:25:24:50 | query.b ... bstr(1) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:49:24:49 | 1 | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:49:24:49 | 1 | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:49:24:49 | 1 | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:49:24:49 | 1 | calleeName | substr | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:49:24:49 | 1 | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:24:49:24:49 | 1 | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:18:29:33 | { title: title } | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:27:29:31 | title | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:27:29:31 | title | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:27:29:31 | title | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:29:27:29:31 | title | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:18:32:45 | { title ... itle) } | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:27:32:43 | JSON.parse(title) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:27:32:43 | JSON.parse(title) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:27:32:43 | JSON.parse(title) | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:27:32:43 | JSON.parse(title) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | calleeName | parse | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query doc find title query body title doc find title query body title substr 1 title req body title title string doc find title title doc find title JSON parse title | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:32:38:32:42 | title | receiverName | JSON | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:9:37:14 | '/:id' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:9:37:14 | '/:id' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:9:37:14 | '/:id' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:9:37:14 | '/:id' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:9:37:14 | '/:id' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:9:37:14 | '/:id' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:17:45:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:17:45:1 | (req, r ... });\\n} | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:17:45:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:17:45:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:17:45:1 | (req, r ... });\\n} | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:37:17:45:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:38:17:38:36 | { id: req.param.id } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:38:17:38:36 | { id: req.param.id } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:38:17:38:36 | { id: req.param.id } | enclosingFunctionBody | req res query id req param id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:38:17:38:36 | { id: req.param.id } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | enclosingFunctionBody | req res query id req param id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:25:39:56 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | enclosingFunctionBody | req res query id req param id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:39:59:44:5 | (err, d ... ;\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | enclosingFunctionBody | req res query id req param id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:40:31:40:35 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | enclosingFunctionBody | req res query id req param id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:43:16:43:20 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:10:47:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:10:47:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:10:47:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:10:47:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:10:47:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:10:47:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:29:56:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:29:56:1 | (req, r ... });\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:29:56:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:29:56:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:29:56:1 | (req, r ... });\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:47:29:56:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:48:19:48:20 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:48:19:48:20 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:48:19:48:20 | {} | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:48:19:48:20 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:25:50:56 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:50:59:55:5 | (err, d ... ;\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:51:31:51:35 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:54:16:54:20 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:10:58:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:10:58:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:10:58:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:10:58:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:10:58:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:10:58:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:29:67:1 | (req, r ... \\n\\t});\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:29:67:1 | (req, r ... \\n\\t});\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:29:67:1 | (req, r ... \\n\\t});\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:29:67:1 | (req, r ... \\n\\t});\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:29:67:1 | (req, r ... \\n\\t});\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:58:29:67:1 | (req, r ... \\n\\t});\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:59:16:59:17 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:59:16:59:17 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:59:16:59:17 | {} | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err client doc client db MASTER collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:59:16:59:17 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err client doc client db MASTER collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:22:61:53 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err client doc client db MASTER collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:61:56:66:2 | (err, c ... ry);\\n\\t} | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | calleeAccessPath | mongodb MongoClient connect client db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | calleeName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err client doc client db MASTER collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:23:62:30 | "MASTER" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | calleeAccessPath | mongodb MongoClient connect client db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err client doc client db MASTER collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:62:44:62:48 | 'doc' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | calleeAccessPath | mongodb MongoClient connect client db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err client doc client db MASTER collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:65:12:65:16 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:10:69:29 | "/logs/count-by-tag" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:10:69:29 | "/logs/count-by-tag" | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:10:69:29 | "/logs/count-by-tag" | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:10:69:29 | "/logs/count-by-tag" | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:10:69:29 | "/logs/count-by-tag" | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:10:69:29 | "/logs/count-by-tag" | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:32:86:1 | (req, r ... g });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:32:86:1 | (req, r ... g });\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:32:86:1 | (req, r ... g });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:32:86:1 | (req, r ... g });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:32:86:1 | (req, r ... g });\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:69:32:86:1 | (req, r ... g });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:23:72:40 | process.env.DB_URL | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:43:72:44 | {} | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:72:47:78:3 | (err, c ... });\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | calleeAccessPath | mongodb MongoClient connect client db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | calleeName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:74:11:74:29 | process.env.DB_NAME | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | calleeAccessPath | mongodb MongoClient connect client db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:75:19:75:24 | "logs" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | calleeAccessPath | mongodb MongoClient connect client db collection count | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn member collection instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:14:77:26 | { tags: tag } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:77:22:77:24 | tag | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:80:29:80:38 | "./dbo.js" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:80:29:80:38 | "./dbo.js" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:80:29:80:38 | "./dbo.js" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:80:29:80:38 | "./dbo.js" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:80:29:80:38 | "./dbo.js" | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:80:29:80:38 | "./dbo.js" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | calleeAccessPath | mongodb MongoClient connect client db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:83:17:83:22 | "logs" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | calleeAccessPath | mongodb MongoClient connect client db collection count | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param client member db instanceorreturn member collection instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:12:85:24 | { tags: tag } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag | enclosingFunctionBody | req res tag req query tag MongoClient connect process env DB_URL err client client db process env DB_NAME collection logs count tags tag importedDbo require ./dbo.js importedDbo db collection logs count tags tag | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:85:20:85:22 | tag | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:9:89:14 | '/:id' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:9:89:14 | '/:id' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:9:89:14 | '/:id' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:9:89:14 | '/:id' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:9:89:14 | '/:id' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:9:89:14 | '/:id' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:17:91:1 | (req, r ... ram);\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:17:91:1 | (req, r ... ram);\\n} | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:17:91:1 | (req, r ... ram);\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:17:91:1 | (req, r ... ram);\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:17:91:1 | (req, r ... ram);\\n} | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:89:17:91:1 | (req, r ... ram);\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:93:15:93:31 | { id: params.id } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:93:15:93:31 | { id: params.id } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:93:15:93:31 | { id: params.id } | enclosingFunctionBody | params query id params id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:93:15:93:31 | { id: params.id } | enclosingFunctionName | useParams | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | enclosingFunctionBody | params query id params id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | enclosingFunctionName | useParams | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:23:94:54 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | enclosingFunctionBody | params query id params id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | enclosingFunctionName | useParams | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:94:57:99:3 | (err, d ... y);\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | enclosingFunctionBody | params query id params id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | enclosingFunctionName | useParams | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:95:29:95:33 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | enclosingFunctionBody | params query id params id MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | enclosingFunctionName | useParams | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:98:14:98:18 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:10:102:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:10:102:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:10:102:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:10:102:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:10:102:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:10:102:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:29:104:1 | (req, r ... ery);\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:29:104:1 | (req, r ... ery);\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:29:104:1 | (req, r ... ery);\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:29:104:1 | (req, r ... ery);\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:29:104:1 | (req, r ... ery);\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:102:29:104:1 | (req, r ... ery);\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:106:17:106:18 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:106:17:106:18 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:106:17:106:18 | {} | enclosingFunctionBody | queries query query title queries title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:106:17:106:18 | {} | enclosingFunctionName | useQuery | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | enclosingFunctionBody | queries query query title queries title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | enclosingFunctionName | useQuery | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:23:108:54 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | enclosingFunctionBody | queries query query title queries title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | enclosingFunctionName | useQuery | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:108:57:113:3 | (err, d ... y);\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | enclosingFunctionBody | queries query query title queries title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | enclosingFunctionName | useQuery | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:109:29:109:33 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | enclosingFunctionBody | queries query query title queries title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | enclosingFunctionName | useQuery | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb.js:112:14:112:18 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:1:25:1:33 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:1:25:1:33 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:1:25:1:33 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:1:25:1:33 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:2:25:2:33 | 'mongodb' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:2:25:2:33 | 'mongodb' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:2:25:2:33 | 'mongodb' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:2:25:2:33 | 'mongodb' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:3:28:3:40 | 'body-parser' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:3:28:3:40 | 'body-parser' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:3:28:3:40 | 'body-parser' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:3:28:3:40 | 'body-parser' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:9:9:50 | bodyPar ... alse }) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:9:9:50 | bodyPar ... alse }) | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:9:9:50 | bodyPar ... alse }) | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:9:9:50 | bodyPar ... alse }) | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:9:9:50 | bodyPar ... alse }) | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:9:9:50 | bodyPar ... alse }) | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:31:9:49 | { extended: false } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:31:9:49 | { extended: false } | calleeAccessPath | body-parser urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:31:9:49 | { extended: false } | calleeAccessPathWithStructuralInfo | body-parser member urlencoded instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:31:9:49 | { extended: false } | calleeApiName | body-parser | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:31:9:49 | { extended: false } | calleeName | urlencoded | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:31:9:49 | { extended: false } | receiverName | bodyParser | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:43:9:47 | false | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:9:43:9:47 | false | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:10:11:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:10:11:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:10:11:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:10:11:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:10:11:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:10:11:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:29:20:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:29:20:1 | (req, r ... });\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:29:20:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:29:20:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:29:20:1 | (req, r ... });\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:11:29:20:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:12:19:12:20 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:12:19:12:20 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:12:19:12:20 | {} | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:12:19:12:20 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:25:14:56 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:14:59:19:5 | (err, d ... ;\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:15:31:15:35 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | enclosingFunctionBody | req res query query title req body title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:18:16:18:20 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:10:22:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:10:22:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:10:22:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:10:22:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:10:22:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:10:22:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:29:31:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:29:31:1 | (req, r ... });\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:29:31:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:29:31:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:29:31:1 | (req, r ... });\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:22:29:31:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:23:19:23:20 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:23:19:23:20 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:23:19:23:20 | {} | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:23:19:23:20 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:25:25:56 | 'mongod ... 7/test' | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | calleeAccessPath | mongodb MongoClient connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:25:59:30:5 | (err, d ... ;\\n } | receiverName | MongoClient | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | calleeAccessPath | mongodb MongoClient connect db collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | calleeName | collection | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:26:31:26:35 | 'doc' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | calleeAccessPath | mongodb MongoClient connect db collection find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | calleeAccessPathWithStructuralInfo | mongodb member MongoClient member connect functionalarg param db member collection instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | calleeApiName | mongodb | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | enclosingFunctionBody | req res query query title req query title MongoClient connect mongodb://localhost:27017/test err db doc db collection doc doc find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongodb_bodySafe.js:29:16:29:20 | query | receiverName | doc | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:2:25:2:33 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:2:25:2:33 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:2:25:2:33 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:2:25:2:33 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:3:28:3:40 | 'body-parser' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:3:28:3:40 | 'body-parser' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:3:28:3:40 | 'body-parser' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:3:28:3:40 | 'body-parser' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:4:26:4:35 | 'mongoose' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:4:26:4:35 | 'mongoose' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:4:26:4:35 | 'mongoose' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:4:26:4:35 | 'mongoose' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:6:18:6:50 | 'mongod ... table1' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:6:18:6:50 | 'mongod ... table1' | calleeAccessPath | mongoose connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:6:18:6:50 | 'mongod ... table1' | calleeAccessPathWithStructuralInfo | mongoose member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:6:18:6:50 | 'mongod ... table1' | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:6:18:6:50 | 'mongod ... table1' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:6:18:6:50 | 'mongod ... table1' | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:9:9:9:25 | BodyParser.json() | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:9:9:9:25 | BodyParser.json() | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:9:9:9:25 | BodyParser.json() | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:9:9:9:25 | BodyParser.json() | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:9:9:9:25 | BodyParser.json() | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:9:9:9:25 | BodyParser.json() | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:33:11:42 | 'Document' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:33:11:42 | 'Document' | calleeAccessPath | mongoose model | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:33:11:42 | 'Document' | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:33:11:42 | 'Document' | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:33:11:42 | 'Document' | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:33:11:42 | 'Document' | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:45:17:1 | {\\n t ... tring\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:45:17:1 | {\\n t ... tring\\n} | calleeAccessPath | mongoose model | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:45:17:1 | {\\n t ... tring\\n} | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:45:17:1 | {\\n t ... tring\\n} | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:45:17:1 | {\\n t ... tring\\n} | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:11:45:17:1 | {\\n t ... tring\\n} | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:12:12:15:5 | {\\n ... e\\n } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:12:12:15:5 | {\\n ... e\\n } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:13:15:13:20 | String | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:13:15:13:20 | String | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:14:17:14:20 | true | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:14:17:14:20 | true | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:16:11:16:16 | String | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:16:11:16:16 | String | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:10:19:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:10:19:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:10:19:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:10:19:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:10:19:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:10:19:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:29:132:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:29:132:1 | (req, r ... // OK\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:29:132:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:29:132:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:29:132:1 | (req, r ... // OK\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:19:29:132:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:20:19:20:20 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:20:19:20:20 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:20:19:20:20 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | calleeAccessPath | mongoose model aggregate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member aggregate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | calleeName | aggregate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:24:24:30 | [query] | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:25:24:29 | query | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:25:24:29 | query | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:24:25:24:29 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | calleeAccessPath | mongoose model count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:27:20:27:24 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | calleeAccessPath | mongoose model deleteMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member deleteMany instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | calleeName | deleteMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:30:25:30:29 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | calleeAccessPath | mongoose model deleteOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member deleteOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | calleeName | deleteOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:33:24:33:28 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | calleeAccessPath | mongoose model distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member distinct instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | calleeName | distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:23:36:28 | 'type' | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | calleeAccessPath | mongoose model distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member distinct instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | calleeName | distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:36:31:36:35 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:39:19:39:23 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:42:22:42:26 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | calleeAccessPath | mongoose model findOneAndDelete | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndDelete instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | calleeName | findOneAndDelete | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:45:31:45:35 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | calleeAccessPath | mongoose model findOneAndRemove | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndRemove instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | calleeName | findOneAndRemove | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:48:31:48:35 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | calleeAccessPath | mongoose model findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | calleeName | findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:51:31:51:35 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | calleeAccessPath | mongoose model replaceOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member replaceOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | calleeName | replaceOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:54:25:54:29 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | calleeAccessPath | mongoose model update | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member update instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | calleeName | update | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:57:21:57:25 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | calleeAccessPath | mongoose model updateMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member updateMany instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | calleeName | updateMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:60:25:60:29 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | calleeAccessPath | mongoose model updateOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member updateOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | calleeName | updateOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:21:63:25 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:33:63:33 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:33:63:33 | X | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:33:63:33 | X | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:33:63:33 | X | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:63:33:63:33 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | calleeAccessPath | mongoose model findByIdAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findByIdAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | calleeName | findByIdAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:29:65:29 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | calleeAccessPath | mongoose model findByIdAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findByIdAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | calleeName | findByIdAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:32:65:36 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | calleeAccessPath | mongoose model findByIdAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findByIdAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | calleeName | findByIdAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:65:39:65:50 | function(){} | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:21:67:21 | X | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:21:67:21 | X | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:21:67:21 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:24:67:24 | Y | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:24:67:24 | Y | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:24:67:24 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:27:67:31 | query | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:27:67:31 | query | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:67:27:67:31 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:8:68:12 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:8:68:12 | query | calleeAccessPath | mongoose Query and | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:8:68:12 | query | calleeAccessPathWithStructuralInfo | mongoose member Query instanceorreturn member and instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:8:68:12 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:8:68:12 | query | calleeName | and | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:8:68:12 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:15:68:26 | function(){} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:15:68:26 | function(){} | calleeAccessPath | mongoose Query and | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:15:68:26 | function(){} | calleeAccessPathWithStructuralInfo | mongoose member Query instanceorreturn member and instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:15:68:26 | function(){} | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:15:68:26 | function(){} | calleeName | and | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:68:15:68:26 | function(){} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | calleeAccessPath | mongoose model where | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | calleeName | where | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:71:20:71:24 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:72:16:72:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:72:16:72:20 | query | calleeAccessPath | mongoose model where where | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:72:16:72:20 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:72:16:72:20 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:72:16:72:20 | query | calleeName | where | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:72:16:72:20 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:73:8:73:12 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:73:8:73:12 | query | calleeAccessPath | mongoose model where where and | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:73:8:73:12 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn member and instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:73:8:73:12 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:73:8:73:12 | query | calleeName | and | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:73:8:73:12 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:74:7:74:11 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:74:7:74:11 | query | calleeAccessPath | mongoose model where where and or | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:74:7:74:11 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn member and instanceorreturn member or instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:74:7:74:11 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:74:7:74:11 | query | calleeName | or | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:74:7:74:11 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:13:75:13 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:13:75:13 | X | calleeAccessPath | mongoose model where where and or distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:13:75:13 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn member and instanceorreturn member or instanceorreturn member distinct instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:13:75:13 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:13:75:13 | X | calleeName | distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:13:75:13 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:16:75:20 | query | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:16:75:20 | query | calleeAccessPath | mongoose model where where and or distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:16:75:20 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn member and instanceorreturn member or instanceorreturn member distinct instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:16:75:20 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:16:75:20 | query | calleeName | distinct | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:75:16:75:20 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query | calleeAccessPath | mongoose model where where and or distinct comment | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn member and instanceorreturn member or instanceorreturn member distinct instanceorreturn member comment instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query | calleeName | comment | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:76:12:76:16 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:77:10:77:14 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:77:10:77:14 | query | calleeAccessPath | mongoose model where where and or distinct comment count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:77:10:77:14 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member where instanceorreturn member where instanceorreturn member and instanceorreturn member or instanceorreturn member distinct instanceorreturn member comment instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:77:10:77:14 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:77:10:77:14 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:77:10:77:14 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | calleeAccessPath | mongoose createConnection | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | calleeName | createConnection | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:28:81:28 | X | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query | calleeAccessPath | mongoose createConnection count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:81:37:81:41 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | calleeAccessPath | mongoose createConnection | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | calleeName | createConnection | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:28:82:28 | X | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:37:82:37 | Y | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:37:82:37 | Y | calleeAccessPath | mongoose createConnection model | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:37:82:37 | Y | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:37:82:37 | Y | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:37:82:37 | Y | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:37:82:37 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:46:82:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:46:82:50 | query | calleeAccessPath | mongoose createConnection model count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:46:82:50 | query | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn member model instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:46:82:50 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:46:82:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:82:46:82:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | calleeAccessPath | mongoose createConnection | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | calleeName | createConnection | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:28:83:28 | X | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:47:83:51 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:47:83:51 | query | calleeAccessPath | mongoose createConnection models count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:47:83:51 | query | calleeAccessPathWithStructuralInfo | mongoose member createConnection instanceorreturn member models member member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:47:83:51 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:47:83:51 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:83:47:83:51 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:19:85:19 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:22:85:51 | (err, r ... (query) | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | calleeAccessPath | mongoose model findOne res count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne functionalarg param res member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:85:46:85:50 | query | receiverName | res | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:19:86:19 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:22:86:51 | (err, r ... (query) | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | calleeAccessPath | mongoose model findOne err count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne functionalarg param err member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:86:46:86:50 | query | receiverName | err | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:19:87:19 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:27:87:56 | (err, r ... (query) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:27:87:56 | (err, r ... (query) | calleeAccessPath | mongoose model findOne exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:27:87:56 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn member exec instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:27:87:56 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:27:87:56 | (err, r ... (query) | calleeName | exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:27:87:56 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | calleeAccessPath | mongoose model findOne exec res count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn member exec functionalarg param res member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:87:51:87:55 | query | receiverName | res | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:19:88:19 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:27:88:56 | (err, r ... (query) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:27:88:56 | (err, r ... (query) | calleeAccessPath | mongoose model findOne exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:27:88:56 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn member exec instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:27:88:56 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:27:88:56 | (err, r ... (query) | calleeName | exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:27:88:56 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | calleeAccessPath | mongoose model findOne exec err count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn member exec functionalarg param err member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:88:51:88:55 | query | receiverName | err | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:19:89:19 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:27:89:51 | (res) = ... (query) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:27:89:51 | (res) = ... (query) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:27:89:51 | (res) = ... (query) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:27:89:51 | (res) = ... (query) | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:27:89:51 | (res) = ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | calleeAccessPath | mongoose model findOne count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:89:46:89:50 | query | receiverName | res | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:19:90:19 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:27:90:27 | Y | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:27:90:27 | Y | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:27:90:27 | Y | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:27:90:27 | Y | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:27:90:27 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:30:90:54 | (err) = ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:30:90:54 | (err) = ... (query) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:30:90:54 | (err) = ... (query) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:30:90:54 | (err) = ... (query) | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:30:90:54 | (err) = ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:90:49:90:53 | query | receiverName | err | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:16:92:16 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:19:92:51 | (err, r ... (query) | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:46:92:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:46:92:50 | query | calleeAccessPath | mongoose model find res count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:46:92:50 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find functionalarg param res member member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:46:92:50 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:46:92:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:92:46:92:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:16:93:16 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:19:93:48 | (err, r ... (query) | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | calleeAccessPath | mongoose model find err count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find functionalarg param err member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:93:43:93:47 | query | receiverName | err | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:16:94:16 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:24:94:56 | (err, r ... (query) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:24:94:56 | (err, r ... (query) | calleeAccessPath | mongoose model find exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:24:94:56 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn member exec instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:24:94:56 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:24:94:56 | (err, r ... (query) | calleeName | exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:24:94:56 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:51:94:55 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:51:94:55 | query | calleeAccessPath | mongoose model find exec res count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:51:94:55 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn member exec functionalarg param res member member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:51:94:55 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:51:94:55 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:94:51:94:55 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:16:95:16 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:24:95:53 | (err, r ... (query) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:24:95:53 | (err, r ... (query) | calleeAccessPath | mongoose model find exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:24:95:53 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn member exec instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:24:95:53 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:24:95:53 | (err, r ... (query) | calleeName | exec | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:24:95:53 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | calleeAccessPath | mongoose model find exec err count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn member exec functionalarg param err member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:95:48:95:52 | query | receiverName | err | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:16:96:16 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:24:96:51 | (res) = ... (query) | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:24:96:51 | (res) = ... (query) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:24:96:51 | (res) = ... (query) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:24:96:51 | (res) = ... (query) | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:24:96:51 | (res) = ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:46:96:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:46:96:50 | query | calleeAccessPath | mongoose model find count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:46:96:50 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn member member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:46:96:50 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:46:96:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:96:46:96:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:16:97:16 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:24:97:24 | Y | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:24:97:24 | Y | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:24:97:24 | Y | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:24:97:24 | Y | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:24:97:24 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:27:97:51 | (err) = ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:27:97:51 | (err) = ... (query) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:27:97:51 | (err) = ... (query) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:27:97:51 | (err) = ... (query) | calleeName | then | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:27:97:51 | (err) = ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:97:46:97:50 | query | receiverName | err | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | calleeAccessPath | mongoose model count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:17:99:17 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | calleeAccessPath | mongoose model count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:20:99:49 | (err, r ... (query) | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | calleeAccessPath | mongoose model count res count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member count functionalarg param res member count instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | calleeName | count | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:99:44:99:48 | query | receiverName | res | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:29:102:38 | "constant" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:29:102:38 | "constant" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:29:102:38 | "constant" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:41:102:50 | "constant" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:41:102:50 | "constant" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:41:102:50 | "constant" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:53:102:62 | "constant" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:53:102:62 | "constant" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:102:53:102:62 | "constant" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:8:111:8 | X | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:8:111:8 | X | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:8:111:8 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:11:111:11 | Y | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:11:111:11 | Y | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:11:111:11 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:14:111:18 | query | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:14:111:18 | query | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:111:14:111:18 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | calleeAccessPath | mongoose model findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | calleeName | findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:28:113:28 | X | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | calleeAccessPath | mongoose model findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | calleeName | findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:31:113:35 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | calleeAccessPath | mongoose model findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | calleeName | findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:113:38:113:52 | function () { } | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | calleeAccessPath | mongoose model deleteMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member deleteMany instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | calleeName | deleteMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:116:22:116:25 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | calleeAccessPath | mongoose model deleteOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member deleteOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | calleeName | deleteOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:117:21:117:24 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | calleeAccessPath | mongoose model geoSearch | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member geoSearch instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | calleeName | geoSearch | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:118:21:118:24 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | calleeAccessPath | mongoose model remove | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member remove instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | calleeName | remove | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:119:18:119:21 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | calleeAccessPath | mongoose model replaceOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member replaceOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | calleeName | replaceOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:22:120:25 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | calleeAccessPath | mongoose model replaceOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member replaceOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | calleeName | replaceOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:120:28:120:28 | Y | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:121:16:121:19 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | calleeAccessPath | mongoose model findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | calleeName | findOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:122:19:122:22 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | calleeAccessPath | mongoose model findById | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findById instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | calleeName | findById | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:123:20:123:21 | id | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | calleeAccessPath | mongoose model findOneAndDelete | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndDelete instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | calleeName | findOneAndDelete | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:124:28:124:31 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | calleeAccessPath | mongoose model findOneAndRemove | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndRemove instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | calleeName | findOneAndRemove | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:125:28:125:31 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | calleeAccessPath | mongoose model findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | calleeName | findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:28:126:31 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | calleeAccessPath | mongoose model findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member findOneAndUpdate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | calleeName | findOneAndUpdate | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:126:34:126:34 | Y | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | calleeAccessPath | mongoose model update | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member update instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | calleeName | update | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:18:127:21 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | calleeAccessPath | mongoose model update | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member update instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | calleeName | update | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:127:24:127:24 | Y | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | calleeAccessPath | mongoose model updateMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member updateMany instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | calleeName | updateMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:22:128:25 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | calleeAccessPath | mongoose model updateMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member updateMany instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | calleeName | updateMany | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:128:28:128:28 | Y | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | calleeAccessPath | mongoose model updateOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member updateOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | calleeName | updateOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:21:129:24 | cond | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | calleeAccessPath | mongoose model updateOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member updateOne instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | calleeName | updateOne | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:129:27:129:27 | Y | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:16:130:26 | { _id: id } | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:23:130:24 | id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:23:130:24 | id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:130:23:130:24 | id | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:16:131:35 | { _id: { $eq: id } } | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:23:131:33 | { $eq: id } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:23:131:33 | { $eq: id } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:23:131:33 | { $eq: id } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:30:131:31 | id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:30:131:31 | id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongoose.js:131:30:131:31 | id | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:2:25:2:33 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:2:25:2:33 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:2:25:2:33 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:2:25:2:33 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:3:28:3:40 | 'body-parser' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:3:28:3:40 | 'body-parser' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:3:28:3:40 | 'body-parser' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:3:28:3:40 | 'body-parser' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:4:26:4:35 | 'mongoose' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:4:26:4:35 | 'mongoose' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:4:26:4:35 | 'mongoose' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:4:26:4:35 | 'mongoose' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:6:18:6:50 | 'mongod ... table1' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:6:18:6:50 | 'mongod ... table1' | calleeAccessPath | mongoose connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:6:18:6:50 | 'mongod ... table1' | calleeAccessPathWithStructuralInfo | mongoose member connect instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:6:18:6:50 | 'mongod ... table1' | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:6:18:6:50 | 'mongod ... table1' | calleeName | connect | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:6:18:6:50 | 'mongod ... table1' | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:33:10:42 | 'Document' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:33:10:42 | 'Document' | calleeAccessPath | mongoose model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:33:10:42 | 'Document' | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:33:10:42 | 'Document' | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:33:10:42 | 'Document' | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:33:10:42 | 'Document' | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:45:16:1 | {\\n t ... tring\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:45:16:1 | {\\n t ... tring\\n} | calleeAccessPath | mongoose model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:45:16:1 | {\\n t ... tring\\n} | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:45:16:1 | {\\n t ... tring\\n} | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:45:16:1 | {\\n t ... tring\\n} | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:10:45:16:1 | {\\n t ... tring\\n} | receiverName | Mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:11:12:14:5 | {\\n ... e\\n } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:11:12:14:5 | {\\n ... e\\n } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:12:15:12:20 | String | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:12:15:12:20 | String | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:13:17:13:20 | true | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:13:17:13:20 | true | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:15:11:15:16 | String | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:15:11:15:16 | String | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:9:18:25 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:9:18:25 | '/documents/find' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:9:18:25 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:9:18:25 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:9:18:25 | '/documents/find' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:9:18:25 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:28:24:1 | (req, r ... ery);\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:28:24:1 | (req, r ... ery);\\n} | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:28:24:1 | (req, r ... ery);\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:28:24:1 | (req, r ... ery);\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:28:24:1 | (req, r ... ery);\\n} | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:18:28:24:1 | (req, r ... ery);\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:19:19:19:20 | {} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:19:19:19:20 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:19:19:19:20 | {} | enclosingFunctionBody | req res query query title JSON parse req query data title Document find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:19:19:19:20 | {} | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | calleeName | parse | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | enclosingFunctionBody | req res query query title JSON parse req query data title Document find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:20:30:20:43 | req.query.data | receiverName | JSON | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | enclosingFunctionBody | req res query query title JSON parse req query data title Document find query | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseJsonParse.js:23:19:23:23 | query | receiverName | Document | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:39:3:47 | 'MyModel' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:39:3:47 | 'MyModel' | calleeAccessPath | mongoose model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:39:3:47 | 'MyModel' | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:39:3:47 | 'MyModel' | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:39:3:47 | 'MyModel' | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:39:3:47 | 'MyModel' | receiverName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:50:3:60 | getSchema() | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:50:3:60 | getSchema() | calleeAccessPath | mongoose model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:50:3:60 | getSchema() | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:50:3:60 | getSchema() | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:50:3:60 | getSchema() | calleeName | model | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModel.js:3:50:3:60 | getSchema() | receiverName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:7:9:7:25 | bodyParser.json() | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:7:9:7:25 | bodyParser.json() | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:7:9:7:25 | bodyParser.json() | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:7:9:7:25 | bodyParser.json() | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:7:9:7:25 | bodyParser.json() | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:7:9:7:25 | bodyParser.json() | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:10:9:16 | '/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:10:9:16 | '/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:10:9:16 | '/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:10:9:16 | '/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:10:9:16 | '/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:10:9:16 | '/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:19:14:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:19:14:1 | (req, r ... // OK\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:19:14:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:19:14:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:19:14:1 | (req, r ... // OK\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:9:19:14:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | calleeName | parse | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:10:22:10:31 | req.body.x | receiverName | JSON | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:16:11:24 | { id: v } | receiverName | MyModel | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:11:22:11:22 | v | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:16:12:34 | { id: req.body.id } | receiverName | MyModel | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:12:22:12:32 | req.body.id | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | calleeAccessPath | mongoose model find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | calleeAccessPathWithStructuralInfo | mongoose member model instanceorreturn member find instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | calleeApiName | mongoose | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | calleeName | find | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:16:13:39 | { id: ` ... .id}` } | receiverName | MyModel | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` | enclosingFunctionBody | req res v JSON parse req body x MyModel find id v MyModel find id req body id MyModel find id req body id | +| autogenerated/NosqlAndSqlInjection/untyped/mongooseModelClient.js:13:22:13:37 | `${req.body.id}` | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | calleeAccessPath | pg-promise IDatabase one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | calleeAccessPathWithStructuralInfo | pg-promise member IDatabase instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | enclosingFunctionBody | req res taint req params x db one taint res end | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:8:17:8:21 | taint | enclosingFunctionName | onRequest | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:9:13:17 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:9:13:17 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:9:13:17 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:9:13:17 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:26:13:31 | '/foo' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:26:13:31 | '/foo' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:26:13:31 | '/foo' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:26:13:31 | '/foo' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:26:13:31 | '/foo' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:34:13:76 | (req, r ... q, res) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:34:13:76 | (req, r ... q, res) | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:34:13:76 | (req, r ... q, res) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:34:13:76 | (req, r ... q, res) | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise-types.ts:13:34:13:76 | (req, r ... q, res) | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:1:21:1:32 | 'pg-promise' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:1:21:1:32 | 'pg-promise' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:1:21:1:32 | 'pg-promise' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:1:21:1:32 | 'pg-promise' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:9:3:17 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:9:3:17 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:9:3:17 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:9:3:17 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:26:3:31 | '/foo' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:26:3:31 | '/foo' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:26:3:31 | '/foo' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:26:3:31 | '/foo' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:26:3:31 | '/foo' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:34:66:1 | (req, r ... \\n );\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:34:66:1 | (req, r ... \\n );\\n} | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:34:66:1 | (req, r ... \\n );\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:34:66:1 | (req, r ... \\n );\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:3:34:66:1 | (req, r ... \\n );\\n} | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | calleeAccessPath | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | calleeName | pgp | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:4:18:4:52 | process ... TRING'] | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:34 | "SELECT ... ategory | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:34 | "SELECT ... ategory | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:34 | "SELECT ... ategory | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:34 | "SELECT ... ategory | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:55 | "SELECT ... PRICE" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:55 | "SELECT ... PRICE" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:55 | "SELECT ... PRICE" | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:6:15:7:55 | "SELECT ... PRICE" | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | calleeAccessPath | pg-promise any | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member any instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | calleeName | any | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:9:10:9:14 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | calleeAccessPath | pg-promise many | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member many instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | calleeName | many | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:10:11:10:15 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | calleeAccessPath | pg-promise manyOrNone | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member manyOrNone instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | calleeName | manyOrNone | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:11:17:11:21 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | calleeAccessPath | pg-promise map | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member map instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | calleeName | map | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:12:10:12:14 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | calleeAccessPath | pg-promise multi | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member multi instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | calleeName | multi | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:13:12:13:16 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | calleeAccessPath | pg-promise multiResult | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member multiResult instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | calleeName | multiResult | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:14:18:14:22 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | calleeAccessPath | pg-promise none | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member none instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | calleeName | none | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:15:11:15:15 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:16:10:16:14 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | calleeAccessPath | pg-promise oneOrNone | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member oneOrNone instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | calleeName | oneOrNone | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:17:16:17:20 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | calleeAccessPath | pg-promise query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:18:12:18:16 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | calleeAccessPath | pg-promise result | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member result instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | calleeName | result | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:19:13:19:17 | query | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:21:10:23:3 | {\\n t ... OK\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:22:11:22:15 | query | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:22:11:22:15 | query | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:22:11:22:15 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:22:11:22:15 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:24:10:27:3 | {\\n t ... OK\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:25:11:25:44 | 'SELECT ... d = $1' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:25:11:25:44 | 'SELECT ... d = $1' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:25:11:25:44 | 'SELECT ... d = $1' | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:25:11:25:44 | 'SELECT ... d = $1' | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:26:13:26:25 | req.params.id | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:28:10:31:3 | {\\n t ... ter\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:29:11:29:48 | 'SELECT ... $1:raw' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:29:11:29:48 | 'SELECT ... $1:raw' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:29:11:29:48 | 'SELECT ... $1:raw' | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:29:11:29:48 | 'SELECT ... $1:raw' | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:30:13:30:25 | req.params.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:30:13:30:25 | req.params.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:30:13:30:25 | req.params.id | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:30:13:30:25 | req.params.id | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:32:10:35:3 | {\\n t ... OK\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:33:11:33:45 | 'SELECT ... = $1^' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:33:11:33:45 | 'SELECT ... = $1^' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:33:11:33:45 | 'SELECT ... = $1^' | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:33:11:33:45 | 'SELECT ... = $1^' | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:34:13:34:25 | req.params.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:34:13:34:25 | req.params.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:34:13:34:25 | req.params.id | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:34:13:34:25 | req.params.id | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:36:10:43:3 | {\\n t ... ]\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:37:11:37:79 | 'SELECT ... o = $3' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:37:11:37:79 | 'SELECT ... o = $3' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:37:11:37:79 | 'SELECT ... o = $3' | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:37:11:37:79 | 'SELECT ... o = $3' | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:38:13:42:5 | [\\n ... n\\n ] | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:38:13:42:5 | [\\n ... n\\n ] | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:38:13:42:5 | [\\n ... n\\n ] | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:38:13:42:5 | [\\n ... n\\n ] | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:39:7:39:19 | req.params.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:39:7:39:19 | req.params.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:39:7:39:19 | req.params.id | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:39:7:39:19 | req.params.id | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:40:7:40:21 | req.params.name | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:40:7:40:21 | req.params.name | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:40:7:40:21 | req.params.name | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:40:7:40:21 | req.params.name | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:41:7:41:20 | req.params.foo | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:44:10:50:3 | {\\n t ... }\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:45:11:45:70 | 'SELECT ... {name}' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:45:11:45:70 | 'SELECT ... {name}' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:45:11:45:70 | 'SELECT ... {name}' | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:45:11:45:70 | 'SELECT ... {name}' | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:46:13:49:5 | {\\n ... n\\n } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:46:13:49:5 | {\\n ... n\\n } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:46:13:49:5 | {\\n ... n\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:46:13:49:5 | {\\n ... n\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:47:11:47:23 | req.params.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:47:11:47:23 | req.params.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:47:11:47:23 | req.params.id | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:47:11:47:23 | req.params.id | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:48:13:48:27 | req.params.name | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | calleeAccessPath | pg-promise one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:51:10:58:3 | {\\n t ... }\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:52:11:52:121 | "SELECT ... lue%\\"" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:52:11:52:121 | "SELECT ... lue%\\"" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:52:11:52:121 | "SELECT ... lue%\\"" | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:52:11:52:121 | "SELECT ... lue%\\"" | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:53:13:57:5 | {\\n ... e\\n } | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:53:13:57:5 | {\\n ... e\\n } | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:53:13:57:5 | {\\n ... e\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:53:13:57:5 | {\\n ... e\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:54:11:54:23 | req.params.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:54:11:54:23 | req.params.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:54:11:54:23 | req.params.id | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:54:11:54:23 | req.params.id | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:55:13:55:27 | req.params.name | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:56:14:56:29 | req.params.title | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:56:14:56:29 | req.params.title | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:56:14:56:29 | req.params.title | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:56:14:56:29 | req.params.title | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | calleeAccessPath | pg-promise task | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member task instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | calleeName | task | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:59:11:61:3 | t => {\\n ... OK\\n } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | calleeAccessPath | pg-promise task t one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member task functionalarg param t member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:60:20:60:24 | query | receiverName | t | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | calleeAccessPath | pg-promise task | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member task instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | calleeName | task | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:5:63:30 | { cnd: ... uery) } | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:12:63:28 | t => t.one(query) | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:12:63:28 | t => t.one(query) | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:12:63:28 | t => t.one(query) | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:12:63:28 | t => t.one(query) | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | calleeAccessPath | pg-promise task 0 cnd t one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member task functionalarg 0 cnd param t member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:63:23:63:27 | query | receiverName | t | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | calleeAccessPath | pg-promise task | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member task instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | calleeName | task | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:5:64:21 | t => t.one(query) | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | calleeAccessPath | pg-promise task t one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | calleeAccessPathWithStructuralInfo | pg-promise instanceorreturn instanceorreturn member task functionalarg param t member one instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | calleeApiName | pg-promise | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | calleeName | one | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | enclosingFunctionBody | req res db pgp process DB_CONNECTION_STRING env DB_CONNECTION_STRING query SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE db any query db many query db manyOrNone query db map query db multi query db multiResult query db none query db one query db oneOrNone query db query query db result query db one text query db one text SELECT * FROM news where id = $1 values req params id db one text SELECT * FROM news where id = $1:raw values req params id db one text SELECT * FROM news where id = $1^ values req params id db one text SELECT * FROM news where id = $1:raw AND name = $2:raw AND foo = $3 values req params id req params name req params foo db one text SELECT * FROM news where id = ${id}:raw AND name = ${name} values id req params id name req params name db one text SELECT * FROM news where id = ${id}:value AND name LIKE '%${name}:value%' AND title LIKE "%${title}:value%" values id req params id name req params name title req params title db task t t one query db task cnd t t one query t t one query | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | enclosingFunctionName | get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/pg-promise.js:64:16:64:20 | query | receiverName | t | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:2:23:2:29 | "redis" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:2:23:2:29 | "redis" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:2:23:2:29 | "redis" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:2:23:2:29 | "redis" | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:5:25:5:33 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:5:25:5:33 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:5:25:5:33 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:5:25:5:33 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:9:7:37 | require ... .json() | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:9:7:37 | require ... .json() | calleeAccessPath | express use | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:9:7:37 | require ... .json() | calleeAccessPathWithStructuralInfo | express instanceorreturn member use instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:9:7:37 | require ... .json() | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:9:7:37 | require ... .json() | calleeName | use | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:9:7:37 | require ... .json() | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:17:7:29 | 'body-parser' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:17:7:29 | 'body-parser' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:17:7:29 | 'body-parser' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:7:17:7:29 | 'body-parser' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:10:9:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:10:9:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:10:9:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:10:9:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:10:9:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:10:9:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:29:33:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:29:33:1 | (req, r ... OT OK\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:29:33:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:29:33:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:29:33:1 | (req, r ... OT OK\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:9:29:33:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:16:10:27 | req.body.key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:10:30:10:36 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:20:14:22 | key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:14:25:14:31 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:20:15:35 | ["key", "value"] | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:21:15:25 | "key" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:21:15:25 | "key" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:21:15:25 | "key" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:21:15:25 | "key" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:28:15:34 | "value" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:28:15:34 | "value" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:28:15:34 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:15:28:15:34 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:16:18:18 | key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:18:21:18:27 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | calleeAccessPath | redis createClient hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member hmset instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | calleeName | hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:18:19:22 | "key" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | calleeAccessPath | redis createClient hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member hmset instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | calleeName | hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:25:19:31 | "field" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | calleeAccessPath | redis createClient hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member hmset instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | calleeName | hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:34:19:40 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | argumentIndex | 3 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | calleeAccessPath | redis createClient hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member hmset instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | calleeName | hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:43:19:45 | key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | argumentIndex | 4 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | calleeAccessPath | redis createClient hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member hmset instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | calleeName | hmset | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:19:48:19:55 | "value2" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | calleeAccessPath | redis createClient multi set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member multi instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:14:24:23 | "constant" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | calleeAccessPath | redis createClient multi set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member multi instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:24:26:24:32 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | calleeAccessPath | redis createClient multi set set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member multi instanceorreturn member set instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:14:25:16 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | calleeAccessPath | redis createClient multi set set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member multi instanceorreturn member set instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:25:19:25:25 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | calleeAccessPath | redis createClient multi set set get | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member multi instanceorreturn member set instanceorreturn member set instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:26:14:26:16 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | calleeAccessPath | redis createClient multi set set get exec | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member multi instanceorreturn member set instanceorreturn member set instanceorreturn member get instanceorreturn member exec instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | calleeName | exec | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:27:15:27:41 | functio ... es) { } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | calleeAccessPath | redis createClient duplicate | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member duplicate instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | calleeName | duplicate | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:29:22:31:5 | (err, n ... K\\n } | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | calleeAccessPath | redis createClient duplicate newClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member duplicate functionalarg param newClient member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:23:30:25 | key | receiverName | newClient | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | calleeAccessPath | redis createClient duplicate newClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member duplicate functionalarg param newClient member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:30:28:30:34 | "value" | receiverName | newClient | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | calleeAccessPath | redis createClient duplicate set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member duplicate instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:28:32:30 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | calleeAccessPath | redis createClient duplicate set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member duplicate instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | enclosingFunctionBody | req res client set req body key value key req body key key string client set key value client set key value client set key value client hmset key field value key value2 client multi set constant value set key value get key exec err replies client duplicate err newClient newClient set key value client duplicate set key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:32:33:32:39 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:10:37:26 | '/documents/find' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:10:37:26 | '/documents/find' | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:10:37:26 | '/documents/find' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:10:37:26 | '/documents/find' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:10:37:26 | '/documents/find' | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:10:37:26 | '/documents/find' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:29:53:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:29:53:1 | (req, r ... // OK\\n} | calleeAccessPath | express post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:29:53:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:29:53:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:29:53:1 | (req, r ... // OK\\n} | calleeName | post | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:37:29:53:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:16:39:18 | key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | calleeAccessPath | redis createClient set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member set instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | calleeApiName | redis | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | calleeName | set | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:39:21:39:27 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | calleeName | promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:32:41:41 | client.set | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | calleeAccessPath | util promisify bind | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn member bind instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | calleeName | bind | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:41:49:41:54 | client | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | calleeName | setAsync | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:27:43:29 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | calleeName | setAsync | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:43:32:43:38 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | calleeAccessPath | redis createClient setAsync util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member setAsync util member promisify instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | calleeApiName | redis util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | calleeName | promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:45:33:45:42 | client.set | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | calleeName | setAsync | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:34:46:36 | key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | calleeName | setAsync | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:46:39:46:45 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | calleeAccessPath | redis createClient unrelated util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | calleeAccessPathWithStructuralInfo | redis member createClient instanceorreturn member unrelated util member promisify instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | calleeApiName | redis util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | calleeName | promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:48:34:48:41 | () => {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | calleeName | unrelated | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:35:49:37 | key | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | calleeName | unrelated | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:49:40:49:46 | "value" | receiverName | client | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | calleeName | promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:33:51:45 | client.foobar | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | calleeAccessPath | util promisify bind | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn member bind instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | calleeName | bind | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:51:53:51:58 | client | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | calleeName | unrelated | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:28:52:30 | key | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | calleeAccessPath | util promisify | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | calleeApiName | util | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | calleeName | unrelated | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | enclosingFunctionBody | req res key req body key client set key value setAsync promisify client set bind client foo1 setAsync key value client setAsync promisify client set foo2 client setAsync key value client unrelated promisify foo3 client unrelated key value unrelated promisify client foobar bind client foo4 unrelated key value | +| autogenerated/NosqlAndSqlInjection/untyped/redis.js:52:33:52:39 | "value" | enclosingFunctionName | app.post#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:4:23:4:31 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:4:23:4:31 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:4:23:4:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:4:23:4:31 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:5:23:5:31 | 'sqlite3' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:5:23:5:31 | 'sqlite3' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:5:23:5:31 | 'sqlite3' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:5:23:5:31 | 'sqlite3' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:8:18:8:28 | 'socket.io' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:8:18:8:28 | 'socket.io' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:8:18:8:28 | 'socket.io' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:8:18:8:28 | 'socket.io' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:7:9:18 | 'connection' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:7:9:18 | 'connection' | calleeAccessPath | socket.io on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:7:9:18 | 'connection' | calleeAccessPathWithStructuralInfo | socket.io instanceorreturn member on instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:7:9:18 | 'connection' | calleeApiName | socket.io | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:7:9:18 | 'connection' | calleeName | on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:7:9:18 | 'connection' | receiverName | io | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:21:13:1 | (socket ... });\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:21:13:1 | (socket ... });\\n} | calleeAccessPath | socket.io on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:21:13:1 | (socket ... });\\n} | calleeAccessPathWithStructuralInfo | socket.io instanceorreturn member on instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:21:13:1 | (socket ... });\\n} | calleeApiName | socket.io | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:21:13:1 | (socket ... });\\n} | calleeName | on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:9:21:13:1 | (socket ... });\\n} | receiverName | io | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | calleeAccessPath | socket.io on socket on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | calleeAccessPathWithStructuralInfo | socket.io instanceorreturn member on functionalarg param socket member on instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | calleeApiName | socket.io | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | calleeName | on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | enclosingFunctionBody | socket socket on newuser handle db run INSERT INTO users(name) VALUES handle | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | enclosingFunctionName | io.on#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:13:10:21 | 'newuser' | receiverName | socket | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | calleeAccessPath | socket.io on socket on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | calleeAccessPathWithStructuralInfo | socket.io instanceorreturn member on functionalarg param socket member on instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | calleeApiName | socket.io | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | calleeName | on | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | enclosingFunctionBody | socket socket on newuser handle db run INSERT INTO users(name) VALUES handle | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | enclosingFunctionName | io.on#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:10:24:12:3 | (handle ... `);\\n } | receiverName | socket | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | calleeAccessPath | sqlite3 verbose Database run | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | calleeAccessPathWithStructuralInfo | sqlite3 member verbose instanceorreturn member Database instanceorreturn member run instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | calleeApiName | sqlite3 | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | calleeName | run | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | enclosingFunctionBody | socket socket on newuser handle db run INSERT INTO users(name) VALUES handle | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | enclosingFunctionName | io.on#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/socketio.js:11:12:11:53 | `INSERT ... andle}` | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:1:23:1:31 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:1:23:1:31 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:1:23:1:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:1:23:1:31 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:2:13:2:28 | require('mssql') | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:2:13:2:28 | require('mssql') | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:2:21:2:27 | 'mssql' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:2:21:2:27 | 'mssql' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:2:21:2:27 | 'mssql' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:2:21:2:27 | 'mssql' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:9:5:19 | '/post/:id' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:9:5:19 | '/post/:id' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:9:5:19 | '/post/:id' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:9:5:19 | '/post/:id' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:9:5:19 | '/post/:id' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:9:5:19 | '/post/:id' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:22:10:1 | async f ... "'");\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:22:10:1 | async f ... "'");\\n} | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:22:10:1 | async f ... "'");\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:22:10:1 | async f ... "'");\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:22:10:1 | async f ... "'");\\n} | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:5:22:10:1 | async f ... "'");\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | calleeAccessPath | mssql Request query | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | calleeAccessPathWithStructuralInfo | mssql member Request instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | calleeApiName | mssql | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | enclosingFunctionBody | req res sql query select * from mytable where id = req params id sql Request query select * from mytable where id = ' req params id ' | +| autogenerated/NosqlAndSqlInjection/untyped/tst2.js:9:27:9:84 | "select ... d + "'" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:3:20:3:23 | 'pg' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:3:20:3:23 | 'pg' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:3:20:3:23 | 'pg' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:3:20:3:23 | 'pg' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:34 | "SELECT ... ategory | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:34 | "SELECT ... ategory | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:34 | "SELECT ... ategory | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:34 | "SELECT ... ategory | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:55 | "SELECT ... PRICE" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:55 | "SELECT ... PRICE" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:55 | "SELECT ... PRICE" | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:7:16:8:55 | "SELECT ... PRICE" | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | calleeAccessPath | pg Pool query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | calleeAccessPathWithStructuralInfo | pg member Pool instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | calleeApiName | pg | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:14:9:19 | query1 | receiverName | pool | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | calleeAccessPath | pg Pool query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | calleeAccessPathWithStructuralInfo | pg member Pool instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | calleeApiName | pg | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:22:9:23 | [] | receiverName | pool | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | calleeAccessPath | pg Pool query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | calleeAccessPathWithStructuralInfo | pg member Pool instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | calleeApiName | pg | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:9:26:11:3 | functio ... lts\\n } | receiverName | pool | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:14:16:15:32 | "SELECT ... PRICE" | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:14:16:15:32 | "SELECT ... PRICE" | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:14:16:15:32 | "SELECT ... PRICE" | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:14:16:15:32 | "SELECT ... PRICE" | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | calleeAccessPath | pg Pool query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | calleeAccessPathWithStructuralInfo | pg member Pool instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | calleeApiName | pg | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:14:16:19 | query2 | receiverName | pool | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | calleeAccessPath | pg Pool query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | calleeAccessPathWithStructuralInfo | pg member Pool instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | calleeApiName | pg | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:22:16:42 | [req.pa ... tegory] | receiverName | pool | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:23:16:41 | req.params.category | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | argumentIndex | 2 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | calleeAccessPath | pg Pool query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | calleeAccessPathWithStructuralInfo | pg member Pool instanceorreturn member query instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | calleeApiName | pg | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | calleeName | query | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | enclosingFunctionBody | req res query1 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=' req params category ' ORDER BY PRICE pool query query1 err results query2 SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=$1 ORDER BY PRICE pool query query2 req params category err results | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | enclosingFunctionName | handler | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:16:45:18:3 | functio ... lts\\n } | receiverName | pool | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:9:21:17 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:9:21:17 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:9:21:17 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:9:21:17 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:26:21:31 | '/foo' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:26:21:31 | '/foo' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:26:21:31 | '/foo' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:26:21:31 | '/foo' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:26:21:31 | '/foo' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:34:21:40 | handler | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:34:21:40 | handler | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:34:21:40 | handler | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:34:21:40 | handler | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/tst3.js:21:34:21:40 | handler | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:3:23:3:31 | 'sqlite3' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:3:23:3:31 | 'sqlite3' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:3:23:3:31 | 'sqlite3' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:3:23:3:31 | 'sqlite3' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:16:6:22 | 'myApp' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:16:6:22 | 'myApp' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:16:6:22 | 'myApp' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:16:6:22 | 'myApp' | calleeName | module | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:16:6:22 | 'myApp' | receiverName | angular | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:25:6:35 | ['ngRoute'] | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:25:6:35 | ['ngRoute'] | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:25:6:35 | ['ngRoute'] | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:25:6:35 | ['ngRoute'] | calleeName | module | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:25:6:35 | ['ngRoute'] | receiverName | angular | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:26:6:34 | 'ngRoute' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:6:26:6:34 | 'ngRoute' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:13:7:22 | 'FindPost' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:13:7:22 | 'FindPost' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:13:7:22 | 'FindPost' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:13:7:22 | 'FindPost' | calleeName | controller | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:25:9:1 | functio ... '"');\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:25:9:1 | functio ... '"');\\n} | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:25:9:1 | functio ... '"');\\n} | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:7:25:9:1 | functio ... '"');\\n} | calleeName | controller | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:60 | 'SELECT ... rams.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:60 | 'SELECT ... rams.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:60 | 'SELECT ... rams.id | enclosingFunctionBody | $routeParams db get SELECT * FROM Post WHERE id = " $routeParams id " | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:60 | 'SELECT ... rams.id | enclosingFunctionName | controller#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | calleeAccessPath | sqlite3 verbose Database get | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | calleeAccessPathWithStructuralInfo | sqlite3 member verbose instanceorreturn member Database instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | calleeApiName | sqlite3 | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | enclosingFunctionBody | $routeParams db get SELECT * FROM Post WHERE id = " $routeParams id " | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | enclosingFunctionName | controller#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/tst4.js:8:10:8:66 | 'SELECT ... d + '"' | receiverName | db | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:4:23:4:31 | 'express' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:4:23:4:31 | 'express' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:4:23:4:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:4:23:4:31 | 'express' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:5:23:5:31 | 'sqlite3' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:5:23:5:31 | 'sqlite3' | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:5:23:5:31 | 'sqlite3' | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:5:23:5:31 | 'sqlite3' | calleeName | require | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:9:9:19 | '/post/:id' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:9:9:19 | '/post/:id' | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:9:9:19 | '/post/:id' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:9:9:19 | '/post/:id' | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:9:9:19 | '/post/:id' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:9:9:19 | '/post/:id' | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:22:11:1 | functio ... '"');\\n} | argumentIndex | 1 | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:22:11:1 | functio ... '"');\\n} | calleeAccessPath | express get | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:22:11:1 | functio ... '"');\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:22:11:1 | functio ... '"');\\n} | calleeApiName | express | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:22:11:1 | functio ... '"');\\n} | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:9:22:11:1 | functio ... '"');\\n} | receiverName | app | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:58 | 'SELECT ... rams.id | calleeAccessPath | | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:58 | 'SELECT ... rams.id | calleeAccessPathWithStructuralInfo | | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:58 | 'SELECT ... rams.id | enclosingFunctionBody | req res db get SELECT * FROM Post WHERE id = " req params id " | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:58 | 'SELECT ... rams.id | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | argumentIndex | 0 | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | calleeAccessPath | sqlite3 verbose Database get | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | calleeAccessPathWithStructuralInfo | sqlite3 member verbose instanceorreturn member Database instanceorreturn member get instanceorreturn | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | calleeApiName | sqlite3 | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | calleeName | get | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | enclosingFunctionBody | req res db get SELECT * FROM Post WHERE id = " req params id " | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/NosqlAndSqlInjection/untyped/tst.js:10:10:10:64 | 'SELECT ... d + '"' | receiverName | db | +| autogenerated/TaintedPath/TaintedPath-es6.js:6:27:11:1 | functio ... h)));\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath-es6.js:6:27:11:1 | functio ... h)));\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath-es6.js:6:27:11:1 | functio ... h)));\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:6:27:11:1 | functio ... h)));\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath-es6.js:6:27:11:1 | functio ... h)));\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | enclosingFunctionBody | req res path parse req url true query path res write readFileSync join public path | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:20:7:26 | req.url | enclosingFunctionName | createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | enclosingFunctionBody | req res path parse req url true query path res write readFileSync join public path | +| autogenerated/TaintedPath/TaintedPath-es6.js:7:29:7:32 | true | enclosingFunctionName | createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | enclosingFunctionBody | req res path parse req url true query path res write readFileSync join public path | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | enclosingFunctionName | createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:13:10:46 | readFil ... path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | enclosingFunctionBody | req res path parse req url true query path res write readFileSync join public path | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:26:10:45 | join("public", path) | enclosingFunctionName | createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | calleeName | join | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | enclosingFunctionBody | req res path parse req url true query path res write readFileSync join public path | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:31:10:38 | "public" | enclosingFunctionName | createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | calleeName | join | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | enclosingFunctionBody | req res path parse req url true query path res write readFileSync join public path | +| autogenerated/TaintedPath/TaintedPath-es6.js:10:41:10:44 | path | enclosingFunctionName | createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:1:18:1:21 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:1:18:1:21 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:1:18:1:21 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:1:18:1:21 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:2:20:2:25 | 'http' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:2:20:2:25 | 'http' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:2:20:2:25 | 'http' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:2:20:2:25 | 'http' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:3:19:3:23 | 'url' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:3:19:3:23 | 'url' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:3:19:3:23 | 'url' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:3:19:3:23 | 'url' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:4:24:4:42 | 'sanitize-filename' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:4:24:4:42 | 'sanitize-filename' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:4:24:4:42 | 'sanitize-filename' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:4:24:4:42 | 'sanitize-filename' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:5:26:5:31 | 'path' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:5:26:5:31 | 'path' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:5:26:5:31 | 'path' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:5:26:5:31 | 'path' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:8:32:61:1 | functio ... h)));\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:8:32:61:1 | functio ... h)));\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:8:32:61:1 | functio ... h)));\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:8:32:61:1 | functio ... h)));\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:8:32:61:1 | functio ... h)));\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:8:32:61:1 | functio ... h)));\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:9:24:9:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:9:33:9:36 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:12:13:12:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:12:29:12:32 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:15:13:15:49 | fs.read ... + path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:15:29:15:48 | "/home/user/" + path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | calleeAccessPath | url parse query path startsWith | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member startsWith instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | calleeName | startsWith | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:17:23:17:35 | "/home/user/" | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:18:17:18:37 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:18:33:18:36 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | calleeAccessPath | url parse query path indexOf | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member indexOf instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | calleeName | indexOf | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:20:20:20:27 | "secret" | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:21:17:21:37 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:21:33:21:36 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | calleeAccessPath | fs existsSync | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | calleeAccessPathWithStructuralInfo | fs member existsSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | calleeName | existsSync | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:23:21:23:24 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:24:17:24:37 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:24:33:24:36 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:27:15:27:35 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:27:31:27:34 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:30:15:30:35 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:30:31:30:34 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:33:15:33:35 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:33:31:33:34 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:35:10:35:23 | sanitize(path) | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:35:10:35:23 | sanitize(path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:35:10:35:23 | sanitize(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:35:10:35:23 | sanitize(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:36:13:36:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:36:29:36:32 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:38:20:38:26 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:38:29:38:32 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:40:13:40:54 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:40:29:40:53 | pathMod ... e(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | calleeAccessPath | path basename | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | calleeAccessPathWithStructuralInfo | path member basename instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | calleeName | basename | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:40:49:40:52 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:42:13:42:53 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:42:29:42:52 | pathMod ... e(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | calleeAccessPath | path dirname | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | calleeAccessPathWithStructuralInfo | path member dirname instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | calleeName | dirname | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:42:48:42:51 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:44:13:44:53 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:44:29:44:52 | pathMod ... e(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | calleeAccessPath | path extname | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | calleeAccessPathWithStructuralInfo | path member extname instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | calleeName | extname | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:44:48:44:51 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:46:13:46:50 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:46:29:46:49 | pathMod ... n(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:46:45:46:48 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:48:13:48:59 | fs.read ... th, z)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:48:29:48:58 | pathMod ... ath, z) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:48:45:48:45 | x | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:48:48:48:48 | y | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | argumentIndex | 2 | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:48:51:48:54 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | argumentIndex | 3 | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | calleeAccessPath | path join | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:48:57:48:57 | z | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:50:13:50:55 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:50:29:50:54 | pathMod ... e(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | calleeName | normalize | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:50:50:50:53 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:52:13:52:57 | fs.read ... path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:52:29:52:56 | pathMod ... , path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | calleeAccessPath | path relative | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | calleeName | relative | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:52:49:52:49 | x | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | calleeAccessPath | path relative | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | calleeName | relative | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:52:52:52:55 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:54:13:54:57 | fs.read ... th, x)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:54:29:54:56 | pathMod ... ath, x) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | calleeAccessPath | path relative | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | calleeName | relative | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:54:49:54:52 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | calleeAccessPath | path relative | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | calleeName | relative | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:54:55:54:55 | x | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:56:13:56:53 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:56:29:56:52 | pathMod ... e(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | calleeName | resolve | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:56:48:56:51 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:58:13:58:62 | fs.read ... th, z)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:58:29:58:61 | pathMod ... ath, z) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | calleeName | resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:58:48:58:48 | x | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | calleeName | resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:58:51:58:51 | y | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | argumentIndex | 2 | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | calleeName | resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:58:54:58:57 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | argumentIndex | 3 | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | calleeName | resolve | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:58:60:58:60 | z | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:60:13:60:62 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:60:29:60:61 | pathMod ... h(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | calleeAccessPath | path toNamespacedPath | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | calleeAccessPathWithStructuralInfo | path member toNamespacedPath instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | calleeName | toNamespacedPath | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path res write fs readFileSync /home/user/ path path startsWith /home/user/ res write fs readFileSync path path indexOf secret 1 res write fs readFileSync path fs existsSync path res write fs readFileSync path path foo.txt res write fs readFileSync path path foo.txt path bar.txt res write fs readFileSync path path foo.txt path bar.txt someOpaqueCondition res write fs readFileSync path path sanitize path res write fs readFileSync path path url parse req url true query path res write fs readFileSync pathModule basename path res write fs readFileSync pathModule dirname path res write fs readFileSync pathModule extname path res write fs readFileSync pathModule join path res write fs readFileSync pathModule join x y path z res write fs readFileSync pathModule normalize path res write fs readFileSync pathModule relative x path res write fs readFileSync pathModule relative path x res write fs readFileSync pathModule resolve path res write fs readFileSync pathModule resolve x y path z res write fs readFileSync pathModule toNamespacedPath path | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:60:57:60:60 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:63:16:63:22 | 'myApp' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:63:16:63:22 | 'myApp' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:63:16:63:22 | 'myApp' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:63:16:63:22 | 'myApp' | calleeName | module | +| autogenerated/TaintedPath/TaintedPath.js:63:16:63:22 | 'myApp' | receiverName | angular | +| autogenerated/TaintedPath/TaintedPath.js:63:25:63:26 | [] | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:63:25:63:26 | [] | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:63:25:63:26 | [] | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:63:25:63:26 | [] | calleeName | module | +| autogenerated/TaintedPath/TaintedPath.js:63:25:63:26 | [] | receiverName | angular | +| autogenerated/TaintedPath/TaintedPath.js:64:16:64:27 | 'myCustomer' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:64:16:64:27 | 'myCustomer' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:64:16:64:27 | 'myCustomer' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:64:16:64:27 | 'myCustomer' | calleeName | directive | +| autogenerated/TaintedPath/TaintedPath.js:64:30:68:5 | functio ... }\\n } | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:64:30:68:5 | functio ... }\\n } | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:64:30:68:5 | functio ... }\\n } | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:64:30:68:5 | functio ... }\\n } | calleeName | directive | +| autogenerated/TaintedPath/TaintedPath.js:69:16:69:27 | 'myCustomer' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:69:16:69:27 | 'myCustomer' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:69:16:69:27 | 'myCustomer' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:69:16:69:27 | 'myCustomer' | calleeName | directive | +| autogenerated/TaintedPath/TaintedPath.js:69:30:73:5 | functio ... }\\n } | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:69:30:73:5 | functio ... }\\n } | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:69:30:73:5 | functio ... }\\n } | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:69:30:73:5 | functio ... }\\n } | calleeName | directive | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | calleeName | get | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | enclosingFunctionBody | templateUrl Cookie get unsafe | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | enclosingFunctionName | directive#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:71:37:71:44 | "unsafe" | receiverName | Cookie | +| autogenerated/TaintedPath/TaintedPath.js:75:32:80:1 | functio ... OT OK\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:75:32:80:1 | functio ... OT OK\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:75:32:80:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:75:32:80:1 | functio ... OT OK\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:75:32:80:1 | functio ... OT OK\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:75:32:80:1 | functio ... OT OK\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:77:15:77:77 | fs.read ... .query) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:77:31:77:76 | require ... ).query | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:77:39:77:54 | "querystringify" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:77:39:77:54 | "querystringify" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:77:39:77:54 | "querystringify" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:77:39:77:54 | "querystringify" | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:77:39:77:54 | "querystringify" | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:77:39:77:54 | "querystringify" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | calleeAccessPath | querystringify parse | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | calleeAccessPathWithStructuralInfo | querystringify member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | calleeApiName | querystringify | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:77:63:77:69 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:78:15:78:75 | fs.read ... .query) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:78:31:78:74 | require ... ).query | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:78:39:78:52 | "query-string" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:78:39:78:52 | "query-string" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:78:39:78:52 | "query-string" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:78:39:78:52 | "query-string" | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:78:39:78:52 | "query-string" | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:78:39:78:52 | "query-string" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | calleeAccessPath | query-string parse | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | calleeAccessPathWithStructuralInfo | query-string member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | calleeApiName | query-string | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:78:61:78:67 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:79:15:79:74 | fs.read ... .query) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:79:31:79:73 | require ... ).query | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:79:39:79:51 | "querystring" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:79:39:79:51 | "querystring" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:79:39:79:51 | "querystring" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:79:39:79:51 | "querystring" | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:79:39:79:51 | "querystring" | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:79:39:79:51 | "querystring" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | calleeAccessPath | querystring parse | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | calleeAccessPathWithStructuralInfo | querystring member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | calleeApiName | querystring | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | enclosingFunctionBody | req res res write fs readFileSync require querystringify parse req url query res write fs readFileSync require query-string parse req url query res write fs readFileSync require querystring parse req url query | +| autogenerated/TaintedPath/TaintedPath.js:79:60:79:66 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:84:27:84:35 | 'express' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:84:27:84:35 | 'express' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:84:27:84:35 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:84:27:84:35 | 'express' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:84:27:84:35 | 'express' | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:84:27:84:35 | 'express' | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | calleeAccessPath | express get res render | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member render instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | calleeApiName | express | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | calleeName | render | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:87:48:87:60 | req.params[0] | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | calleeAccessPath | express get | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | calleeApiName | express | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | calleeName | get | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:88:21:88:30 | '/views/*' | receiverName | application | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | calleeAccessPath | express get | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | calleeApiName | express | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | calleeName | get | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:88:33:88:43 | views_local | receiverName | application | +| autogenerated/TaintedPath/TaintedPath.js:90:34:90:42 | "./views" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:90:34:90:42 | "./views" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:90:34:90:42 | "./views" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:90:34:90:42 | "./views" | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:90:34:90:42 | "./views" | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:90:34:90:42 | "./views" | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | calleeAccessPath | express get | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | calleeApiName | express | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | calleeName | get | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:91:21:91:30 | '/views/*' | receiverName | application | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | calleeAccessPath | express get | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | calleeApiName | express | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | calleeName | get | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | enclosingFunctionBody | express require express application express views_local req res res render req 0 params 0 application get /views/* views_local views_imported require ./views application get /views/* views_imported | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | enclosingFunctionName | | +| autogenerated/TaintedPath/TaintedPath.js:91:33:91:46 | views_imported | receiverName | application | +| autogenerated/TaintedPath/TaintedPath.js:95:18:95:26 | 'message' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:95:18:95:26 | 'message' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:95:18:95:26 | 'message' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:95:18:95:26 | 'message' | calleeName | addEventListener | +| autogenerated/TaintedPath/TaintedPath.js:95:29:97:1 | (ev) => ... ata);\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:95:29:97:1 | (ev) => ... ata);\\n} | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:95:29:97:1 | (ev) => ... ata);\\n} | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:95:29:97:1 | (ev) => ... ata);\\n} | calleeName | addEventListener | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | calleeName | set | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | enclosingFunctionBody | ev Cookie set unsafe ev data | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | enclosingFunctionName | addEventListener#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:96:14:96:21 | "unsafe" | receiverName | Cookie | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | calleeName | set | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | enclosingFunctionBody | ev Cookie set unsafe ev data | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | enclosingFunctionName | addEventListener#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:96:24:96:30 | ev.data | receiverName | Cookie | +| autogenerated/TaintedPath/TaintedPath.js:99:32:109:1 | functio ... );\\n\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:99:32:109:1 | functio ... );\\n\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:99:32:109:1 | functio ... );\\n\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:99:32:109:1 | functio ... );\\n\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:99:32:109:1 | functio ... );\\n\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:99:32:109:1 | functio ... );\\n\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:100:23:100:29 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:100:32:100:35 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:102:12:102:49 | fs.read ... (path)) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:102:28:102:48 | fs.real ... c(path) | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | calleeAccessPath | fs realpathSync | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | calleeAccessPathWithStructuralInfo | fs member realpathSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | calleeName | realpathSync | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:102:44:102:47 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | calleeAccessPath | fs realpath | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | calleeAccessPathWithStructuralInfo | fs member realpath instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | calleeName | realpath | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:103:14:103:17 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | calleeAccessPath | fs realpath | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | calleeAccessPathWithStructuralInfo | fs member realpath instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | calleeName | realpath | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:104:18:106:18 | functio ... } | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:105:29:105:53 | fs.read ... alpath) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync fs realpathSync path fs realpath path err realpath res write fs readFileSync realpath | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:105:45:105:52 | realpath | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:111:32:120:1 | functio ... bove.\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:111:32:120:1 | functio ... bove.\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:111:32:120:1 | functio ... bove.\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:111:32:120:1 | functio ... bove.\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:111:32:120:1 | functio ... bove.\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:111:32:120:1 | functio ... bove.\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:112:24:112:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:112:33:112:36 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:115:12:115:51 | path.re ... /g, '') | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:115:12:115:51 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:115:12:115:51 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:115:12:115:51 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:115:25:115:46 | /[\\]\\[* ... \\?\\/]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:115:49:115:50 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:116:12:116:36 | path.re ... /g, '') | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:116:12:116:36 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:116:12:116:36 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:116:12:116:36 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | calleeAccessPath | url parse query path replace replace | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:116:25:116:31 | /\\.\\./g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | calleeAccessPath | url parse query path replace replace | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:116:34:116:35 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:119:13:119:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:119:29:119:32 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:122:32:133:1 | functio ... bove.\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:122:32:133:1 | functio ... bove.\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:122:32:133:1 | functio ... bove.\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:122:32:133:1 | functio ... bove.\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:122:32:133:1 | functio ... bove.\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:122:32:133:1 | functio ... bove.\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:123:24:123:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:123:33:123:36 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:128:11:128:50 | path.re ... /g, '') | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:128:11:128:50 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:128:11:128:50 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:128:11:128:50 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:128:24:128:45 | /[\\]\\[* ... \\?\\/]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:128:48:128:49 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:129:12:129:36 | path.re ... /g, '') | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:129:12:129:36 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:129:12:129:36 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:129:12:129:36 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | calleeAccessPath | url parse query path replace replace | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:129:25:129:31 | /\\.\\./g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | calleeAccessPath | url parse query path replace replace | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:129:34:129:35 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:132:13:132:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | enclosingFunctionBody | req res path url parse req url true query path path path path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g path path replace /\\.\\./g res write fs readFileSync path | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:132:29:132:32 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:135:32:139:1 | functio ... OT OK\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:135:32:139:1 | functio ... OT OK\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:135:32:139:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:135:32:139:1 | functio ... OT OK\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:135:32:139:1 | functio ... OT OK\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:135:32:139:1 | functio ... OT OK\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | enclosingFunctionBody | req res path url parse req url true query path require send req path | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:136:23:136:29 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | enclosingFunctionBody | req res path url parse req url true query path require send req path | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:136:32:136:35 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:138:10:138:15 | 'send' | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:138:10:138:15 | 'send' | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:138:10:138:15 | 'send' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:138:10:138:15 | 'send' | calleeName | require | +| autogenerated/TaintedPath/TaintedPath.js:138:10:138:15 | 'send' | enclosingFunctionBody | req res path url parse req url true query path require send req path | +| autogenerated/TaintedPath/TaintedPath.js:138:10:138:15 | 'send' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:138:18:138:20 | req | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:138:18:138:20 | req | calleeAccessPath | send | +| autogenerated/TaintedPath/TaintedPath.js:138:18:138:20 | req | calleeAccessPathWithStructuralInfo | send instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:138:18:138:20 | req | calleeApiName | send | +| autogenerated/TaintedPath/TaintedPath.js:138:18:138:20 | req | enclosingFunctionBody | req res path url parse req url true query path require send req path | +| autogenerated/TaintedPath/TaintedPath.js:138:18:138:20 | req | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:138:23:138:26 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:138:23:138:26 | path | calleeAccessPath | send | +| autogenerated/TaintedPath/TaintedPath.js:138:23:138:26 | path | calleeAccessPathWithStructuralInfo | send instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:138:23:138:26 | path | calleeApiName | send | +| autogenerated/TaintedPath/TaintedPath.js:138:23:138:26 | path | enclosingFunctionBody | req res path url parse req url true query path require send req path | +| autogenerated/TaintedPath/TaintedPath.js:138:23:138:26 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:141:32:163:1 | functio ... OK \\n\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:141:32:163:1 | functio ... OK \\n\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:141:32:163:1 | functio ... OK \\n\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:141:32:163:1 | functio ... OK \\n\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:141:32:163:1 | functio ... OK \\n\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:141:32:163:1 | functio ... OK \\n\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:142:24:142:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:142:33:142:36 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:144:19:144:22 | path | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | calleeName | split | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:146:26:146:28 | "/" | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:148:19:148:33 | split.join("/") | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | calleeAccessPath | url parse query path split join | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:148:30:148:32 | "/" | receiverName | split | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:150:19:150:50 | prefix ... th - 1] | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:152:19:152:26 | split[x] | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:153:19:153:35 | prefix + split[x] | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | calleeName | concat | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:155:33:155:37 | split | receiverName | prefix | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:156:19:156:37 | concatted.join("/") | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | calleeAccessPath | | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:156:34:156:36 | "/" | receiverName | concatted | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | calleeAccessPath | url parse query path split concat | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn member concat instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | calleeName | concat | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:158:33:158:38 | prefix | receiverName | split | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:159:19:159:38 | concatted2.join("/") | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | calleeAccessPath | url parse query path split concat join | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn member concat instanceorreturn member join instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | calleeName | join | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:159:35:159:37 | "/" | receiverName | concatted2 | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path split path split / fs readFileSync split join / fs readFileSync prefix split split length 1 fs readFileSync split x fs readFileSync prefix split x concatted prefix concat split fs readFileSync concatted join / concatted2 split concat prefix fs readFileSync concatted2 join / fs readFileSync split pop | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:161:19:161:29 | split.pop() | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:165:32:196:1 | functio ... lute)\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:165:32:196:1 | functio ... lute)\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/TaintedPath.js:165:32:196:1 | functio ... lute)\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:165:32:196:1 | functio ... lute)\\n} | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:165:32:196:1 | functio ... lute)\\n} | calleeName | createServer | +| autogenerated/TaintedPath/TaintedPath.js:165:32:196:1 | functio ... lute)\\n} | receiverName | http | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:166:24:166:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | calleeName | parse | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:166:33:166:36 | true | receiverName | url | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:169:13:169:69 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:169:29:169:68 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:169:42:169:63 | /[\\]\\[* ... \\?\\/]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:169:66:169:67 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:170:13:170:56 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:170:29:170:55 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:170:42:170:50 | /[abcd]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:170:53:170:54 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:171:13:171:54 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:171:29:171:53 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:171:42:171:48 | /[./]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:171:51:171:52 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:172:13:172:65 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:172:29:172:64 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:172:42:172:59 | /[foobar/foobar]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:172:62:172:63 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:173:13:173:52 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:173:29:173:51 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:173:42:173:46 | /\\//g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:173:49:173:50 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:174:13:174:55 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:174:29:174:54 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:174:42:174:49 | /\\.\|\\//g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:174:52:174:53 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:176:13:176:53 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:176:29:176:52 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:176:42:176:47 | /[.]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:176:50:176:51 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:177:13:177:54 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:177:29:177:53 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:177:42:177:48 | /[..]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:177:51:177:52 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:178:13:178:52 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:178:29:178:51 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:178:42:178:46 | /\\./g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:178:49:178:50 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:179:13:179:58 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:179:29:179:57 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:179:42:179:52 | /\\.\\.\|BLA/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:179:55:179:56 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:182:15:182:55 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:182:31:182:54 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:182:44:182:49 | /[.]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:182:52:182:53 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:183:14:183:55 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:183:30:183:54 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:183:43:183:49 | /[..]/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:183:52:183:53 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:184:15:184:54 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:184:31:184:53 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:184:44:184:48 | /\\./g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:184:51:184:52 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:185:14:185:59 | fs.read ... g, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:185:30:185:58 | path.re ... /g, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:185:43:185:53 | /\\.\\.\|BLA/g | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:185:56:185:57 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:189:13:189:96 | fs.read ... /, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:189:29:189:95 | "prefix ... +/, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | calleeName | normalize | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:189:61:189:64 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:189:75:189:90 | /^(\\.\\.[\\/\\\\])+/ | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:189:93:189:94 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:190:13:190:95 | fs.read ... /, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:190:29:190:94 | "prefix ... +/, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | calleeName | normalize | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:190:61:190:64 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:190:75:190:89 | /(\\.\\.[\\/\\\\])+/ | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:190:92:190:93 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:191:13:191:91 | fs.read ... /, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:191:29:191:90 | "prefix ... +/, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | calleeName | normalize | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:191:61:191:64 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:191:75:191:85 | /(\\.\\.\\/)+/ | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:191:88:191:89 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:192:13:192:91 | fs.read ... /, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:192:29:192:90 | "prefix ... */, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | calleeName | normalize | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:192:61:192:64 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:192:75:192:85 | /(\\.\\.\\/)*/ | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:192:88:192:89 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:194:13:194:74 | fs.read ... /, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:194:29:194:73 | "prefix ... +/, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:194:53:194:68 | /^(\\.\\.[\\/\\\\])+/ | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | calleeAccessPath | url parse query path replace | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | calleeApiName | url | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:194:71:194:72 | '' | receiverName | path | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | calleeApiName | http | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | calleeName | write | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:195:13:195:85 | fs.read ... /, '')) | receiverName | res | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | calleeApiName | fs | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | calleeName | readFileSync | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:195:29:195:84 | pathMod ... +/, '') | receiverName | fs | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | calleeName | normalize | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:195:50:195:53 | path | receiverName | pathModule | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | argumentIndex | 0 | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:195:64:195:79 | /^(\\.\\.[\\/\\\\])+/ | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | calleeApiName | path | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | calleeName | replace | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path replace /[\\]\\[*,;'"`<>\\\\?\\/]/g res write fs readFileSync path replace /[abcd]/g res write fs readFileSync path replace /[./]/g res write fs readFileSync path replace /[foobar/foobar]/g res write fs readFileSync path replace /\\//g res write fs readFileSync path replace /\\.\|\\//g res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g pathModule isAbsolute path res write fs readFileSync path replace /[.]/g res write fs readFileSync path replace /[..]/g res write fs readFileSync path replace /\\./g res write fs readFileSync path replace /\\.\\.\|BLA/g res write fs readFileSync prefix pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.[\\/\\\\])+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)+/ res write fs readFileSync prefix pathModule normalize path replace /(\\.\\.\\/)*/ res write fs readFileSync prefix path replace /^(\\.\\.[\\/\\\\])+/ res write fs readFileSync pathModule normalize path replace /^(\\.\\.[\\/\\\\])+/ | +| autogenerated/TaintedPath/TaintedPath.js:195:82:195:83 | '' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/my-async-fs-module.js:1:20:1:23 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/my-async-fs-module.js:1:20:1:23 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/my-async-fs-module.js:1:20:1:23 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/my-async-fs-module.js:1:20:1:23 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/my-async-fs-module.js:2:29:2:38 | 'bluebird' | argumentIndex | 0 | +| autogenerated/TaintedPath/my-async-fs-module.js:2:29:2:38 | 'bluebird' | calleeAccessPath | | +| autogenerated/TaintedPath/my-async-fs-module.js:2:29:2:38 | 'bluebird' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/my-async-fs-module.js:2:29:2:38 | 'bluebird' | calleeName | require | +| autogenerated/TaintedPath/my-async-fs-module.js:11:33:14:1 | (obj, m ... obj;\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/my-async-fs-module.js:11:33:14:1 | (obj, m ... obj;\\n} | calleeAccessPath | | +| autogenerated/TaintedPath/my-async-fs-module.js:11:33:14:1 | (obj, m ... obj;\\n} | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/my-async-fs-module.js:11:33:14:1 | (obj, m ... obj;\\n} | calleeName | reduce | +| autogenerated/TaintedPath/my-async-fs-module.js:11:33:14:1 | (obj, m ... obj;\\n} | receiverName | methods | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | argumentIndex | 0 | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | calleeAccessPath | bluebird promisify | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | calleeAccessPathWithStructuralInfo | bluebird member promisify instanceorreturn | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | calleeApiName | bluebird | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | calleeName | promisify | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | enclosingFunctionBody | obj method obj method promisify fs method obj | +| autogenerated/TaintedPath/my-async-fs-module.js:12:27:12:36 | fs[method] | enclosingFunctionName | methods.reduce#functionalargument | +| autogenerated/TaintedPath/my-async-fs-module.js:14:4:14:5 | {} | argumentIndex | 1 | +| autogenerated/TaintedPath/my-async-fs-module.js:14:4:14:5 | {} | calleeAccessPath | | +| autogenerated/TaintedPath/my-async-fs-module.js:14:4:14:5 | {} | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/my-async-fs-module.js:14:4:14:5 | {} | calleeName | reduce | +| autogenerated/TaintedPath/my-async-fs-module.js:14:4:14:5 | {} | receiverName | methods | +| autogenerated/TaintedPath/my-fs-module.js:3:18:3:21 | "fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/my-fs-module.js:3:18:3:21 | "fs" | calleeAccessPath | | +| autogenerated/TaintedPath/my-fs-module.js:3:18:3:21 | "fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/my-fs-module.js:3:18:3:21 | "fs" | calleeName | require | +| autogenerated/TaintedPath/my-fs-module.js:3:18:3:21 | "fs" | enclosingFunctionBody | special special require fs require original-fs | +| autogenerated/TaintedPath/my-fs-module.js:3:18:3:21 | "fs" | enclosingFunctionName | require | +| autogenerated/TaintedPath/my-fs-module.js:5:18:5:30 | "original-fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/my-fs-module.js:5:18:5:30 | "original-fs" | calleeAccessPath | | +| autogenerated/TaintedPath/my-fs-module.js:5:18:5:30 | "original-fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/my-fs-module.js:5:18:5:30 | "original-fs" | calleeName | require | +| autogenerated/TaintedPath/my-fs-module.js:5:18:5:30 | "original-fs" | enclosingFunctionBody | special special require fs require original-fs | +| autogenerated/TaintedPath/my-fs-module.js:5:18:5:30 | "original-fs" | enclosingFunctionName | require | +| autogenerated/TaintedPath/normalizedPaths.js:1:18:1:21 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:1:18:1:21 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:1:18:1:21 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:1:18:1:21 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:2:23:2:31 | 'express' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:2:23:2:31 | 'express' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:2:23:2:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:2:23:2:31 | 'express' | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:3:19:3:23 | 'url' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:3:19:3:23 | 'url' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:3:19:3:23 | 'url' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:3:19:3:23 | 'url' | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:4:24:4:42 | 'sanitize-filename' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:4:24:4:42 | 'sanitize-filename' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:4:24:4:42 | 'sanitize-filename' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:4:24:4:42 | 'sanitize-filename' | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:5:26:5:31 | 'path' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:5:26:5:31 | 'path' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:5:26:5:31 | 'path' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:5:26:5:31 | 'path' | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:10:9:10:16 | '/basic' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:10:9:10:16 | '/basic' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:10:9:10:16 | '/basic' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:10:9:10:16 | '/basic' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:10:9:10:16 | '/basic' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:10:9:10:16 | '/basic' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:10:19:18:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:10:19:18:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:10:19:18:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:10:19:18:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:10:19:18:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:10:19:18:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:13:19:13:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:14:19:14:29 | './' + path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:15:19:15:38 | path + '/index.html' | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:16:19:16:53 | pathMod ... .html') | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:16:35:16:38 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:16:41:16:52 | 'index.html' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:17:19:17:57 | pathMod ... , path) | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:17:35:17:50 | '/home/user/www' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | enclosingFunctionBody | req res path req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:17:53:17:56 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:20:9:20:20 | '/normalize' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:20:9:20:20 | '/normalize' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:20:9:20:20 | '/normalize' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:20:9:20:20 | '/normalize' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:20:9:20:20 | '/normalize' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:20:9:20:20 | '/normalize' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:20:23:28:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:20:23:28:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:20:23:28:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:20:23:28:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:20:23:28:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:20:23:28:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:21:35:21:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:23:19:23:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:24:19:24:29 | './' + path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:25:19:25:38 | path + '/index.html' | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:26:19:26:53 | pathMod ... .html') | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:26:35:26:38 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:26:41:26:52 | 'index.html' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:27:19:27:57 | pathMod ... , path) | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:27:35:27:50 | '/home/user/www' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | enclosingFunctionBody | req res path pathModule normalize req query path fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html fs readFileSync pathModule join path index.html fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:27:53:27:56 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:30:9:30:32 | '/norma ... solute' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:30:9:30:32 | '/norma ... solute' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:30:9:30:32 | '/norma ... solute' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:30:9:30:32 | '/norma ... solute' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:30:9:30:32 | '/norma ... solute' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:30:9:30:32 | '/norma ... solute' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:30:35:51:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:30:35:51:1 | (req, r ... // OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:30:35:51:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:30:35:51:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:30:35:51:1 | (req, r ... // OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:30:35:51:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:31:35:31:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:36:19:36:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:38:24:38:26 | "." | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:39:21:39:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:41:21:41:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:43:24:43:27 | ".." | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:44:21:44:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:46:24:46:28 | "../" | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:47:21:47:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:49:24:49:44 | ".." + ... ule.sep | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path fs readFileSync path path startsWith . fs readFileSync path fs readFileSync path path startsWith .. fs readFileSync path path startsWith ../ fs readFileSync path path startsWith .. pathModule sep fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:50:21:50:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:53:9:53:36 | '/norma ... DotDot' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:53:9:53:36 | '/norma ... DotDot' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:53:9:53:36 | '/norma ... DotDot' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:53:9:53:36 | '/norma ... DotDot' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:53:9:53:36 | '/norma ... DotDot' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:53:9:53:36 | '/norma ... DotDot' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:53:39:69:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:53:39:69:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:53:39:69:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:53:39:69:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:53:39:69:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:53:39:69:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:54:35:54:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:56:23:56:26 | ".." | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:59:19:59:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:61:19:61:29 | "./" + path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:63:19:63:38 | path + "/index.html" | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:66:21:66:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync ./ path fs readFileSync path /index.html pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:68:21:68:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:71:9:71:28 | '/prepend-normalize' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:71:9:71:28 | '/prepend-normalize' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:71:9:71:28 | '/prepend-normalize' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:71:9:71:28 | '/prepend-normalize' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:71:9:71:28 | '/prepend-normalize' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:71:9:71:28 | '/prepend-normalize' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:71:31:79:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:71:31:79:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:71:31:79:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:71:31:79:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:71:31:79:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:71:31:79:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize ./ req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | enclosingFunctionBody | req res path pathModule normalize ./ req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:73:35:73:55 | './' + ... ry.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | enclosingFunctionBody | req res path pathModule normalize ./ req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:75:24:75:27 | ".." | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | enclosingFunctionBody | req res path pathModule normalize ./ req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:76:21:76:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | enclosingFunctionBody | req res path pathModule normalize ./ req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:78:22:78:25 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:81:9:81:19 | '/absolute' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:81:9:81:19 | '/absolute' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:81:9:81:19 | '/absolute' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:81:9:81:19 | '/absolute' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:81:9:81:19 | '/absolute' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:81:9:81:19 | '/absolute' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:81:22:91:1 | (req, r ... '../'\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:81:22:91:1 | (req, r ... '../'\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:81:22:91:1 | (req, r ... '../'\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:81:22:91:1 | (req, r ... '../'\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:81:22:91:1 | (req, r ... '../'\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:81:22:91:1 | (req, r ... '../'\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | calleeAccessPath | express get res write | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | enclosingFunctionBody | req res path req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:87:13:87:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:87:29:87:32 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | calleeAccessPath | express get req query path startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member path member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:89:23:89:38 | '/home/user/www' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | calleeAccessPath | express get res write | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | enclosingFunctionBody | req res path req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:90:15:90:35 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:90:31:90:34 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:93:9:93:30 | '/norma ... solute' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:93:9:93:30 | '/norma ... solute' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:93:9:93:30 | '/norma ... solute' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:93:9:93:30 | '/norma ... solute' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:93:9:93:30 | '/norma ... solute' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:93:9:93:30 | '/norma ... solute' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:93:33:103:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:93:33:103:1 | (req, r ... // OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:93:33:103:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:93:33:103:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:93:33:103:1 | (req, r ... // OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:93:33:103:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:94:35:94:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | calleeAccessPath | express get res write | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:99:13:99:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:99:29:99:32 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:101:23:101:38 | '/home/user/www' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | calleeAccessPath | express get res write | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:102:15:102:35 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path res write fs readFileSync path path startsWith /home/user/www res write fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:102:31:102:34 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:105:9:105:25 | '/combined-check' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:105:9:105:25 | '/combined-check' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:105:9:105:25 | '/combined-check' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:105:9:105:25 | '/combined-check' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:105:9:105:25 | '/combined-check' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:105:9:105:25 | '/combined-check' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:105:28:114:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:105:28:114:1 | (req, r ... // OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:105:28:114:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:105:28:114:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:105:28:114:1 | (req, r ... // OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:105:28:114:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:106:14:106:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:106:14:106:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:106:14:106:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith /home/user/www fs readFileSync path path 0 0 / path 0 0 . fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:106:14:106:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith /home/user/www fs readFileSync path path 0 0 / path 0 0 . fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:106:35:106:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith /home/user/www fs readFileSync path path 0 0 / path 0 0 . fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:109:23:109:38 | "/home/user/www" | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith /home/user/www fs readFileSync path path 0 0 / path 0 0 . fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:110:21:110:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path path startsWith /home/user/www fs readFileSync path path 0 0 / path 0 0 . fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:113:21:113:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:116:9:116:19 | '/realpath' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:116:9:116:19 | '/realpath' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:116:9:116:19 | '/realpath' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:116:9:116:19 | '/realpath' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:116:9:116:19 | '/realpath' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:116:9:116:19 | '/realpath' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:116:22:127:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:116:22:127:1 | (req, r ... // OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:116:22:127:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:116:22:127:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:116:22:127:1 | (req, r ... // OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:116:22:127:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | calleeAccessPath | fs realpathSync | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | calleeAccessPathWithStructuralInfo | fs member realpathSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | calleeName | realpathSync | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:117:30:117:43 | req.query.path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:119:19:119:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:120:19:120:53 | pathMod ... .html') | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:120:35:120:38 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:120:41:120:52 | 'index.html' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | calleeAccessPath | fs realpathSync startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | calleeAccessPathWithStructuralInfo | fs member realpathSync instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:122:23:122:38 | "/home/user/www" | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:123:21:123:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:125:19:125:44 | pathMod ... , path) | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:125:35:125:37 | '.' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:125:40:125:43 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:126:19:126:57 | pathMod ... , path) | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:126:35:126:50 | '/home/user/www' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | enclosingFunctionBody | req res path fs realpathSync req query path fs readFileSync path fs readFileSync pathModule join path index.html path startsWith /home/user/www fs readFileSync path fs readFileSync pathModule join . path fs readFileSync pathModule join /home/user/www path | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:126:53:126:56 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:129:9:129:26 | '/coerce-relative' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:129:9:129:26 | '/coerce-relative' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:129:9:129:26 | '/coerce-relative' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:129:9:129:26 | '/coerce-relative' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:129:9:129:26 | '/coerce-relative' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:129:9:129:26 | '/coerce-relative' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:129:29:136:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:129:29:136:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:129:29:136:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:129:29:136:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:129:29:136:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:129:29:136:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule join . req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | enclosingFunctionBody | req res path pathModule join . req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:130:30:130:32 | '.' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | enclosingFunctionBody | req res path pathModule join . req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:130:35:130:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | calleeAccessPath | path join startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | enclosingFunctionBody | req res path pathModule join . req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:132:24:132:27 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | enclosingFunctionBody | req res path pathModule join . req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:133:21:133:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | enclosingFunctionBody | req res path pathModule join . req query path path startsWith .. fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:135:21:135:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:138:9:138:26 | '/coerce-absolute' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:138:9:138:26 | '/coerce-absolute' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:138:9:138:26 | '/coerce-absolute' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:138:9:138:26 | '/coerce-absolute' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:138:9:138:26 | '/coerce-absolute' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:138:9:138:26 | '/coerce-absolute' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:138:29:145:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:138:29:145:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:138:29:145:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:138:29:145:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:138:29:145:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:138:29:145:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule join /home/user/www req query path path startsWith /home/user/www fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | enclosingFunctionBody | req res path pathModule join /home/user/www req query path path startsWith /home/user/www fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:139:30:139:45 | '/home/user/www' | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | enclosingFunctionBody | req res path pathModule join /home/user/www req query path path startsWith /home/user/www fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:139:48:139:61 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | calleeAccessPath | path join startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | enclosingFunctionBody | req res path pathModule join /home/user/www req query path path startsWith /home/user/www fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:141:23:141:38 | '/home/user/www' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | enclosingFunctionBody | req res path pathModule join /home/user/www req query path path startsWith /home/user/www fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:142:21:142:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | enclosingFunctionBody | req res path pathModule join /home/user/www req query path path startsWith /home/user/www fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:144:21:144:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:147:9:147:37 | '/conca ... zation' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:147:9:147:37 | '/conca ... zation' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:147:9:147:37 | '/conca ... zation' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:147:9:147:37 | '/conca ... zation' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:147:9:147:37 | '/conca ... zation' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:147:9:147:37 | '/conca ... zation' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:147:40:157:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:147:40:157:1 | (req, r ... // OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:147:40:157:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:147:40:157:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:147:40:157:1 | (req, r ... // OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:147:40:157:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:148:44:148:57 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:150:24:150:27 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:151:21:151:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:153:21:153:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | calleeName | includes | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:155:22:155:25 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | enclosingFunctionBody | req res path foo/ pathModule normalize req query path path startsWith .. fs readFileSync path fs readFileSync path path includes .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:156:21:156:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:159:9:159:19 | '/noDotDot' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:159:9:159:19 | '/noDotDot' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:159:9:159:19 | '/noDotDot' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:159:9:159:19 | '/noDotDot' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:159:9:159:19 | '/noDotDot' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:159:9:159:19 | '/noDotDot' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:159:22:171:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:159:22:171:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:159:22:171:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:159:22:171:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:159:22:171:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:159:22:171:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path path includes .. fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path path includes .. fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:160:35:160:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | calleeAccessPath | path normalize includes | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member includes instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | calleeName | includes | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | enclosingFunctionBody | req res path pathModule normalize req query path path includes .. fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:162:21:162:24 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | enclosingFunctionBody | req res path pathModule normalize req query path path includes .. fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:165:19:165:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path path includes .. fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:168:21:168:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path path includes .. fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:170:21:170:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:173:9:173:26 | '/join-regression' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:173:9:173:26 | '/join-regression' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:173:9:173:26 | '/join-regression' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:173:9:173:26 | '/join-regression' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:173:9:173:26 | '/join-regression' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:173:9:173:26 | '/join-regression' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:173:29:211:1 | (req, r ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:173:29:211:1 | (req, r ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:173:29:211:1 | (req, r ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:173:29:211:1 | (req, r ... OT OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:173:29:211:1 | (req, r ... OT OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:173:29:211:1 | (req, r ... OT OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | calleeAccessPath | express get req query path startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member path member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:180:23:180:25 | '/' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | calleeAccessPath | express get req query path startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member path member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:181:23:181:26 | '/x' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | calleeAccessPath | express get req query path startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member path member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:182:23:182:25 | '.' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:184:19:184:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:187:21:187:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:189:21:189:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | calleeAccessPath | express get req query path includes | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member path member includes instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | calleeName | includes | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:191:21:191:24 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:192:21:192:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:194:21:194:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | calleeAccessPath | express get req query path includes | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member path member includes instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | calleeName | includes | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:196:22:196:25 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:197:21:197:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:199:21:199:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:201:45:201:48 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:202:33:202:48 | '/home/user/www' | receiverName | normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:203:21:203:34 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:205:21:205:34 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:207:33:207:48 | '/home/user/www' | receiverName | normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:207:80:207:98 | '/home/user/public' | receiverName | normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:208:21:208:34 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | enclosingFunctionBody | req res path req query path pathModule isAbsolute path path path path startsWith / path path path startsWith /x path path path startsWith . path path fs readFileSync path pathModule isAbsolute path fs readFileSync path fs readFileSync path path includes .. fs readFileSync path fs readFileSync path path includes .. pathModule isAbsolute path fs readFileSync path fs readFileSync path normalizedPath pathModule normalize path normalizedPath startsWith /home/user/www fs readFileSync normalizedPath fs readFileSync normalizedPath normalizedPath startsWith /home/user/www normalizedPath startsWith /home/user/public fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:210:21:210:34 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:213:9:213:37 | '/decod ... zation' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:213:9:213:37 | '/decod ... zation' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:213:9:213:37 | '/decod ... zation' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:213:9:213:37 | '/decod ... zation' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:213:9:213:37 | '/decod ... zation' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:213:9:213:37 | '/decod ... zation' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:213:40:223:1 | (req, r ... lized\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:213:40:223:1 | (req, r ... lized\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:213:40:223:1 | (req, r ... lized\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:213:40:223:1 | (req, r ... lized\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:213:40:223:1 | (req, r ... lized\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:213:40:223:1 | (req, r ... lized\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:214:35:214:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | calleeAccessPath | path normalize startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:216:56:216:59 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:217:21:217:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:219:29:219:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:219:29:219:32 | path | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:219:29:219:32 | path | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:219:29:219:32 | path | calleeName | decodeURIComponent | +| autogenerated/TaintedPath/normalizedPaths.js:219:29:219:32 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:219:29:219:32 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:221:56:221:59 | '..' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path pathModule isAbsolute path path startsWith .. fs readFileSync path path decodeURIComponent path pathModule isAbsolute path path startsWith .. fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:222:21:222:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:225:9:225:18 | '/replace' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:225:9:225:18 | '/replace' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:225:9:225:18 | '/replace' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:225:9:225:18 | '/replace' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:225:9:225:18 | '/replace' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:225:9:225:18 | '/replace' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:225:21:233:1 | (req, r ... K\\n }\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:225:21:233:1 | (req, r ... K\\n }\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:225:21:233:1 | (req, r ... K\\n }\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:225:21:233:1 | (req, r ... K\\n }\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:225:21:233:1 | (req, r ... K\\n }\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:225:21:233:1 | (req, r ... K\\n }\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:226:35:226:48 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | calleeName | replace | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:226:59:226:64 | /%20/g | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | calleeAccessPath | path normalize replace | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | calleeName | replace | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:226:67:226:69 | ' ' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:228:21:228:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:230:12:230:36 | path.re ... /g, '') | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:230:12:230:36 | path.re ... /g, '') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:230:12:230:36 | path.re ... /g, '') | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:230:12:230:36 | path.re ... /g, '') | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | calleeAccessPath | path normalize replace replace | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | calleeName | replace | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:230:25:230:31 | /\\.\\./g | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | calleeAccessPath | path normalize replace replace | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member replace instanceorreturn member replace instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | calleeName | replace | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:230:34:230:35 | '' | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | enclosingFunctionBody | req res path pathModule normalize req query path replace /%20/g pathModule isAbsolute path fs readFileSync path path path replace /\\.\\./g fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:231:21:231:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:235:9:235:23 | '/resolve-path' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:235:9:235:23 | '/resolve-path' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:235:9:235:23 | '/resolve-path' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:235:9:235:23 | '/resolve-path' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:235:9:235:23 | '/resolve-path' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:235:9:235:23 | '/resolve-path' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:235:26:251:1 | (req, r ... arity\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:235:26:251:1 | (req, r ... arity\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:235:26:251:1 | (req, r ... arity\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:235:26:251:1 | (req, r ... arity\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:235:26:251:1 | (req, r ... arity\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:235:26:251:1 | (req, r ... arity\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | calleeName | resolve | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:236:33:236:46 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:238:19:238:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | calleeAccessPath | path resolve substring | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn member substring instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | calleeName | substring | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:242:22:242:22 | 0 | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | calleeAccessPath | path resolve substring | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn member substring instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | calleeName | substring | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:242:25:242:39 | self.dir.length | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:243:21:243:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:245:21:245:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | calleeAccessPath | path resolve slice | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn member slice instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | calleeName | slice | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:247:18:247:18 | 0 | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | calleeAccessPath | path resolve slice | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn member slice instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | calleeName | slice | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:247:21:247:35 | self.dir.length | receiverName | path | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:248:21:248:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something path substring 0 self dir length self dir fs readFileSync path fs readFileSync path path slice 0 self dir length self dir fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:250:21:250:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:253:9:253:30 | '/relat ... tswith' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:253:9:253:30 | '/relat ... tswith' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:253:9:253:30 | '/relat ... tswith' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:253:9:253:30 | '/relat ... tswith' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:253:9:253:30 | '/relat ... tswith' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:253:9:253:30 | '/relat ... tswith' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:253:33:298:1 | (req, r ... \\n }\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:253:33:298:1 | (req, r ... \\n }\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:253:33:298:1 | (req, r ... \\n }\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:253:33:298:1 | (req, r ... \\n }\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:253:33:298:1 | (req, r ... \\n }\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:253:33:298:1 | (req, r ... \\n }\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | calleeName | resolve | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:254:33:254:46 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:256:19:256:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:260:38:260:49 | self.webroot | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:260:52:260:55 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | calleeAccessPath | path relative startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn member startsWith instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | calleeName | startsWith | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:261:26:261:46 | ".." + ... ule.sep | receiverName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:262:21:262:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:264:21:264:24 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:267:38:267:41 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:268:42:268:75 | pathMod ... aceDir) | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:268:63:268:74 | workspaceDir | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:268:78:268:84 | newpath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | calleeAccessPath | path relative indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn member indexOf instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | calleeName | indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:269:28:269:48 | '..' + ... ule.sep | receiverName | relativePath | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:270:21:270:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:272:21:272:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:275:38:275:41 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:276:42:276:75 | pathMod ... aceDir) | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:276:63:276:74 | workspaceDir | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:276:78:276:84 | newpath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | calleeAccessPath | path relative indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn member indexOf instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | calleeName | indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:277:28:277:32 | '../' | receiverName | relativePath | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:278:21:278:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:280:21:280:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:283:38:283:41 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:284:42:284:75 | pathMod ... aceDir) | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:284:63:284:74 | workspaceDir | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:284:78:284:84 | newpath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:285:28:285:39 | relativePath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | calleeAccessPath | path normalize indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member indexOf instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | calleeName | indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:285:50:285:54 | '../' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:286:21:286:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:288:21:288:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:291:38:291:41 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:292:42:292:75 | pathMod ... aceDir) | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:292:63:292:74 | workspaceDir | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | calleeAccessPath | path relative | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | calleeAccessPathWithStructuralInfo | path member relative instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | calleeName | relative | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:292:78:292:84 | newpath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | calleeAccessPath | path normalize | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | calleeName | normalize | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:293:28:293:39 | relativePath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | calleeAccessPath | path normalize indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | calleeAccessPathWithStructuralInfo | path member normalize instanceorreturn member indexOf instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | calleeName | indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:293:50:293:54 | '../' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:294:21:294:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path self something relative pathModule relative self webroot path relative startsWith .. pathModule sep relative .. fs readFileSync path fs readFileSync path newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf .. pathModule sep 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ 0 fs readFileSync newpath fs readFileSync newpath newpath pathModule normalize path relativePath pathModule relative pathModule normalize workspaceDir newpath pathModule normalize relativePath indexOf ../ fs readFileSync newpath fs readFileSync newpath | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:296:21:296:27 | newpath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:300:28:300:43 | "is-path-inside" | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:300:28:300:43 | "is-path-inside" | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:300:28:300:43 | "is-path-inside" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:300:28:300:43 | "is-path-inside" | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:301:28:301:43 | "path-is-inside" | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:301:28:301:43 | "path-is-inside" | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:301:28:301:43 | "path-is-inside" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:301:28:301:43 | "path-is-inside" | calleeName | require | +| autogenerated/TaintedPath/normalizedPaths.js:302:9:302:32 | '/pseud ... ations' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:302:9:302:32 | '/pseud ... ations' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:302:9:302:32 | '/pseud ... ations' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:302:9:302:32 | '/pseud ... ations' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:302:9:302:32 | '/pseud ... ations' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:302:9:302:32 | '/pseud ... ations' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:302:35:336:1 | (req, r ... \\n\\n\\t}\\n\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:302:35:336:1 | (req, r ... \\n\\n\\t}\\n\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:302:35:336:1 | (req, r ... \\n\\n\\t}\\n\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:302:35:336:1 | (req, r ... \\n\\n\\t}\\n\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:302:35:336:1 | (req, r ... \\n\\n\\t}\\n\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:302:35:336:1 | (req, r ... \\n\\n\\t}\\n\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:304:18:304:21 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:306:19:306:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:309:19:309:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | calleeAccessPath | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | calleeAccessPathWithStructuralInfo | path-is-inside instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | calleeApiName | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | calleeName | pathIsInside | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:312:19:312:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | calleeAccessPath | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | calleeAccessPathWithStructuralInfo | path-is-inside instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | calleeApiName | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | calleeName | pathIsInside | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:312:25:312:28 | SAFE | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:313:19:313:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:316:19:316:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:320:39:320:42 | SAFE | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:320:45:320:48 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | calleeAccessPath | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | calleeAccessPathWithStructuralInfo | path-is-inside instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | calleeApiName | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | calleeName | pathIsInside | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:321:19:321:32 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | calleeAccessPath | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | calleeAccessPathWithStructuralInfo | path-is-inside instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | calleeApiName | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | calleeName | pathIsInside | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:321:35:321:38 | SAFE | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:322:19:322:32 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:325:19:325:32 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | calleeAccessPath | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | calleeAccessPathWithStructuralInfo | path-is-inside instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | calleeApiName | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | calleeName | pathIsInside | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:328:19:328:32 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | calleeAccessPath | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | calleeAccessPathWithStructuralInfo | path-is-inside instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | calleeApiName | path-is-inside | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | calleeName | pathIsInside | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:328:35:328:38 | SAFE | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:329:19:329:32 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | enclosingFunctionBody | req res path req query path fs readFileSync path isPathInside path SAFE fs readFileSync path fs readFileSync path pathIsInside path SAFE fs readFileSync path fs readFileSync path normalizedPath pathModule join SAFE path pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath pathIsInside normalizedPath SAFE fs readFileSync normalizedPath fs readFileSync normalizedPath | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:332:19:332:32 | normalizedPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:338:9:338:29 | '/yet-a ... prefix' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:338:9:338:29 | '/yet-a ... prefix' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:338:9:338:29 | '/yet-a ... prefix' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:338:9:338:29 | '/yet-a ... prefix' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:338:9:338:29 | '/yet-a ... prefix' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:338:9:338:29 | '/yet-a ... prefix' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:338:32:350:1 | (req, r ... // OK\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:338:32:350:1 | (req, r ... // OK\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:338:32:350:1 | (req, r ... // OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:338:32:350:1 | (req, r ... // OK\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:338:32:350:1 | (req, r ... // OK\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:338:32:350:1 | (req, r ... // OK\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | calleeName | resolve | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:339:32:339:45 | req.query.path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:341:18:341:21 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | calleeName | resolve | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:343:31:343:34 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | calleeAccessPath | path resolve indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn member indexOf instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | calleeName | indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:345:18:345:21 | root | receiverName | abs | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:346:19:346:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | enclosingFunctionBody | req res path pathModule resolve req query path fs readFileSync path abs pathModule resolve path abs indexOf root 0 fs readFileSync path fs readFileSync path | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:349:18:349:21 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:353:9:353:30 | '/yet-a ... refix2' | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:353:9:353:30 | '/yet-a ... refix2' | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:353:9:353:30 | '/yet-a ... refix2' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:353:9:353:30 | '/yet-a ... refix2' | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:353:9:353:30 | '/yet-a ... refix2' | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:353:9:353:30 | '/yet-a ... refix2' | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:353:33:373:1 | (req, r ... ;\\n }\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:353:33:373:1 | (req, r ... ;\\n }\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/normalizedPaths.js:353:33:373:1 | (req, r ... ;\\n }\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:353:33:373:1 | (req, r ... ;\\n }\\n} | calleeApiName | express | +| autogenerated/TaintedPath/normalizedPaths.js:353:33:373:1 | (req, r ... ;\\n }\\n} | calleeName | get | +| autogenerated/TaintedPath/normalizedPaths.js:353:33:373:1 | (req, r ... ;\\n }\\n} | receiverName | app | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:356:19:356:22 | path | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:358:37:358:44 | rootPath | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | calleeAccessPath | path join | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | calleeName | join | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:358:47:358:50 | path | receiverName | pathModule | +| autogenerated/TaintedPath/normalizedPaths.js:361:18:361:28 | requestPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:361:18:361:28 | requestPath | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:361:18:361:28 | requestPath | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:361:18:361:28 | requestPath | calleeName | allowPath | +| autogenerated/TaintedPath/normalizedPaths.js:361:18:361:28 | requestPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:361:18:361:28 | requestPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:361:31:361:38 | rootPath | argumentIndex | 1 | +| autogenerated/TaintedPath/normalizedPaths.js:361:31:361:38 | rootPath | calleeAccessPath | | +| autogenerated/TaintedPath/normalizedPaths.js:361:31:361:38 | rootPath | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/normalizedPaths.js:361:31:361:38 | rootPath | calleeName | allowPath | +| autogenerated/TaintedPath/normalizedPaths.js:361:31:361:38 | rootPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:361:31:361:38 | rootPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:363:21:363:31 | requestPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:366:21:366:31 | requestPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | calleeApiName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | calleeName | readFileSync | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:368:19:368:28 | targetPath | receiverName | fs | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | argumentIndex | 0 | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | calleeAccessPath | path join indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | calleeAccessPathWithStructuralInfo | path member join instanceorreturn member indexOf instanceorreturn | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | calleeApiName | path | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | calleeName | indexOf | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | enclosingFunctionBody | req res path req query path fs readFileSync path requestPath pathModule join rootPath path targetPath allowPath requestPath rootPath targetPath rootPath fs readFileSync requestPath targetPath requestPath fs readFileSync requestPath fs readFileSync targetPath allowPath requestPath rootPath requestPath indexOf rootPath 0 | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/normalizedPaths.js:371:32:371:39 | rootPath | receiverName | requestPath | +| autogenerated/TaintedPath/other-fs-libraries.js:1:20:1:25 | "http" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:1:20:1:25 | "http" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:1:20:1:25 | "http" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:1:20:1:25 | "http" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:2:17:2:21 | "url" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:2:17:2:21 | "url" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:2:17:2:21 | "url" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:2:17:2:21 | "url" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:3:16:3:19 | "fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:3:16:3:19 | "fs" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:3:16:3:19 | "fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:3:16:3:19 | "fs" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:4:24:4:36 | "graceful-fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:4:24:4:36 | "graceful-fs" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:4:24:4:36 | "graceful-fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:4:24:4:36 | "graceful-fs" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:5:21:5:30 | "fs-extra" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:5:21:5:30 | "fs-extra" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:5:21:5:30 | "fs-extra" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:5:21:5:30 | "fs-extra" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:6:24:6:36 | "original-fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:6:24:6:36 | "original-fs" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:6:24:6:36 | "original-fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:6:24:6:36 | "original-fs" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:8:32:25:1 | functio ... OT OK\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:8:32:25:1 | functio ... OT OK\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/other-fs-libraries.js:8:32:25:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:8:32:25:1 | functio ... OT OK\\n} | calleeApiName | http | +| autogenerated/TaintedPath/other-fs-libraries.js:8:32:25:1 | functio ... OT OK\\n} | calleeName | createServer | +| autogenerated/TaintedPath/other-fs-libraries.js:8:32:25:1 | functio ... OT OK\\n} | receiverName | http | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:9:24:9:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | calleeName | parse | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:9:33:9:36 | true | receiverName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:11:19:11:22 | path | receiverName | fs | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | calleeAccessPath | graceful-fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | calleeAccessPathWithStructuralInfo | graceful-fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | calleeApiName | graceful-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:12:27:12:30 | path | receiverName | gracefulFs | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | calleeAccessPath | fs-extra readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | calleeAccessPathWithStructuralInfo | fs-extra member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | calleeApiName | fs-extra | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:13:24:13:27 | path | receiverName | fsExtra | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | calleeAccessPath | original-fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | calleeAccessPathWithStructuralInfo | original-fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | calleeApiName | original-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:14:27:14:30 | path | receiverName | originalFs | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | calleeAccessPath | fs readFileSync original-fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn original-fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | calleeApiName | fs original-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:16:34:16:37 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | calleeAccessPath | fs readFileSync original-fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn original-fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | calleeApiName | fs original-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:17:35:17:38 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:19:11:19:26 | "./my-fs-module" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:19:11:19:26 | "./my-fs-module" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:19:11:19:26 | "./my-fs-module" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:19:11:19:26 | "./my-fs-module" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:19:11:19:26 | "./my-fs-module" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:19:11:19:26 | "./my-fs-module" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | calleeAccessPath | fs readFileSync original-fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn original-fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | calleeApiName | fs original-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:19:56:19:59 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:21:36:23:10 | process ... : "fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:21:36:23:10 | process ... : "fs" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:21:36:23:10 | process ... : "fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:21:36:23:10 | process ... : "fs" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:21:36:23:10 | process ... : "fs" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:21:36:23:10 | process ... : "fs" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path gracefulFs readFileSync path fsExtra readFileSync path originalFs readFileSync path getFsModule true readFileSync path getFsModule false readFileSync path require ./my-fs-module require true readFileSync path flexibleModuleName require process electron versions electron original-fs fs flexibleModuleName readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:24:35:24:38 | path | receiverName | flexibleModuleName | +| autogenerated/TaintedPath/other-fs-libraries.js:29:20:29:23 | "fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:29:20:29:23 | "fs" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:29:20:29:23 | "fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:29:20:29:23 | "fs" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:29:20:29:23 | "fs" | enclosingFunctionBody | special special require fs require original-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:29:20:29:23 | "fs" | enclosingFunctionName | getFsModule | +| autogenerated/TaintedPath/other-fs-libraries.js:31:20:31:32 | "original-fs" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:31:20:31:32 | "original-fs" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:31:20:31:32 | "original-fs" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:31:20:31:32 | "original-fs" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:31:20:31:32 | "original-fs" | enclosingFunctionBody | special special require fs require original-fs | +| autogenerated/TaintedPath/other-fs-libraries.js:31:20:31:32 | "original-fs" | enclosingFunctionName | getFsModule | +| autogenerated/TaintedPath/other-fs-libraries.js:35:20:35:25 | "util" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:35:20:35:25 | "util" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:35:20:35:25 | "util" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:35:20:35:25 | "util" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:37:19:43:1 | functio ... OT OK\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:37:19:43:1 | functio ... OT OK\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/other-fs-libraries.js:37:19:43:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:37:19:43:1 | functio ... OT OK\\n} | calleeApiName | http | +| autogenerated/TaintedPath/other-fs-libraries.js:37:19:43:1 | functio ... OT OK\\n} | calleeName | createServer | +| autogenerated/TaintedPath/other-fs-libraries.js:37:19:43:1 | functio ... OT OK\\n} | receiverName | http | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:38:24:38:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | calleeName | parse | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:38:33:38:36 | true | receiverName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | calleeAccessPath | util promisify | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | calleeApiName | util | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | calleeName | promisify | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:40:18:40:32 | fs.readFileSync | receiverName | util | +| autogenerated/TaintedPath/other-fs-libraries.js:40:35:40:38 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:40:35:40:38 | path | calleeAccessPath | util promisify | +| autogenerated/TaintedPath/other-fs-libraries.js:40:35:40:38 | path | calleeAccessPathWithStructuralInfo | util member promisify instanceorreturn instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:40:35:40:38 | path | calleeApiName | util | +| autogenerated/TaintedPath/other-fs-libraries.js:40:35:40:38 | path | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:40:35:40:38 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:41:11:41:20 | "bluebird" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:41:11:41:20 | "bluebird" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:41:11:41:20 | "bluebird" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:41:11:41:20 | "bluebird" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:41:11:41:20 | "bluebird" | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:41:11:41:20 | "bluebird" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | calleeAccessPath | bluebird promisify | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | calleeAccessPathWithStructuralInfo | bluebird member promisify instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | calleeApiName | bluebird | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | calleeName | promisify | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:41:33:41:47 | fs.readFileSync | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:41:50:41:53 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:41:50:41:53 | path | calleeAccessPath | bluebird promisify | +| autogenerated/TaintedPath/other-fs-libraries.js:41:50:41:53 | path | calleeAccessPathWithStructuralInfo | bluebird member promisify instanceorreturn instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:41:50:41:53 | path | calleeApiName | bluebird | +| autogenerated/TaintedPath/other-fs-libraries.js:41:50:41:53 | path | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:41:50:41:53 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:42:11:42:20 | "bluebird" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:42:11:42:20 | "bluebird" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:42:11:42:20 | "bluebird" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:42:11:42:20 | "bluebird" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:42:11:42:20 | "bluebird" | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:42:11:42:20 | "bluebird" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | calleeAccessPath | bluebird promisifyAll | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | calleeAccessPathWithStructuralInfo | bluebird member promisifyAll instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | calleeApiName | bluebird | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | calleeName | promisifyAll | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:42:36:42:37 | fs | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | calleeAccessPath | bluebird promisifyAll readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | calleeAccessPathWithStructuralInfo | bluebird member promisifyAll instanceorreturn member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | calleeApiName | bluebird | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | enclosingFunctionBody | req res path url parse req url true query path util promisify fs readFileSync path require bluebird promisify fs readFileSync path require bluebird promisifyAll fs readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:42:53:42:56 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:46:25:46:46 | "./my-a ... module" | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:46:25:46:46 | "./my-a ... module" | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:46:25:46:46 | "./my-a ... module" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:46:25:46:46 | "./my-a ... module" | calleeName | require | +| autogenerated/TaintedPath/other-fs-libraries.js:48:19:53:1 | functio ... OT OK\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:48:19:53:1 | functio ... OT OK\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/other-fs-libraries.js:48:19:53:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:48:19:53:1 | functio ... OT OK\\n} | calleeApiName | http | +| autogenerated/TaintedPath/other-fs-libraries.js:48:19:53:1 | functio ... OT OK\\n} | calleeName | createServer | +| autogenerated/TaintedPath/other-fs-libraries.js:48:19:53:1 | functio ... OT OK\\n} | receiverName | http | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path asyncFS readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:49:24:49:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | calleeName | parse | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path asyncFS readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:49:33:49:36 | true | receiverName | url | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path asyncFS readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:51:19:51:22 | path | receiverName | fs | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | calleeAccessPath | | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path asyncFS readFileSync path | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/other-fs-libraries.js:52:24:52:27 | path | receiverName | asyncFS | +| autogenerated/TaintedPath/pupeteer.js:1:27:1:37 | 'puppeteer' | argumentIndex | 0 | +| autogenerated/TaintedPath/pupeteer.js:1:27:1:37 | 'puppeteer' | calleeAccessPath | | +| autogenerated/TaintedPath/pupeteer.js:1:27:1:37 | 'puppeteer' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/pupeteer.js:1:27:1:37 | 'puppeteer' | calleeName | require | +| autogenerated/TaintedPath/pupeteer.js:2:30:2:44 | 'parse-torrent' | argumentIndex | 0 | +| autogenerated/TaintedPath/pupeteer.js:2:30:2:44 | 'parse-torrent' | calleeAccessPath | | +| autogenerated/TaintedPath/pupeteer.js:2:30:2:44 | 'parse-torrent' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/pupeteer.js:2:30:2:44 | 'parse-torrent' | calleeName | require | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | argumentIndex | 0 | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | calleeAccessPath | parse-torrent | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | calleeAccessPathWithStructuralInfo | parse-torrent instanceorreturn | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | calleeApiName | parse-torrent | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | calleeName | parseTorrent | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | enclosingFunctionBody | tainted dir/ parseTorrent torrent name .torrent.data browser puppeteer launch page browser newPage page pdf path tainted format a4 pages browser pages i 0 i something i pages i screenshot path tainted browser close | +| autogenerated/TaintedPath/pupeteer.js:5:41:5:47 | torrent | enclosingFunctionName | | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | argumentIndex | 0 | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | calleeAccessPath | puppeteer launch newPage pdf | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | calleeAccessPathWithStructuralInfo | puppeteer member launch instanceorreturn member newPage instanceorreturn member pdf instanceorreturn | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | calleeApiName | puppeteer | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | calleeName | pdf | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | enclosingFunctionBody | tainted dir/ parseTorrent torrent name .torrent.data browser puppeteer launch page browser newPage page pdf path tainted format a4 pages browser pages i 0 i something i pages i screenshot path tainted browser close | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | enclosingFunctionName | | +| autogenerated/TaintedPath/pupeteer.js:9:20:9:50 | { path: ... 'a4' } | receiverName | page | +| autogenerated/TaintedPath/pupeteer.js:9:28:9:34 | tainted | calleeAccessPath | | +| autogenerated/TaintedPath/pupeteer.js:9:28:9:34 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/pupeteer.js:9:28:9:34 | tainted | enclosingFunctionBody | tainted dir/ parseTorrent torrent name .torrent.data browser puppeteer launch page browser newPage page pdf path tainted format a4 pages browser pages i 0 i something i pages i screenshot path tainted browser close | +| autogenerated/TaintedPath/pupeteer.js:9:28:9:34 | tainted | enclosingFunctionName | | +| autogenerated/TaintedPath/pupeteer.js:9:45:9:48 | 'a4' | calleeAccessPath | | +| autogenerated/TaintedPath/pupeteer.js:9:45:9:48 | 'a4' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/pupeteer.js:9:45:9:48 | 'a4' | enclosingFunctionBody | tainted dir/ parseTorrent torrent name .torrent.data browser puppeteer launch page browser newPage page pdf path tainted format a4 pages browser pages i 0 i something i pages i screenshot path tainted browser close | +| autogenerated/TaintedPath/pupeteer.js:9:45:9:48 | 'a4' | enclosingFunctionName | | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | argumentIndex | 0 | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | calleeAccessPath | puppeteer launch pages screenshot | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | calleeAccessPathWithStructuralInfo | puppeteer member launch instanceorreturn member pages instanceorreturn member member screenshot instanceorreturn | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | calleeApiName | puppeteer | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | calleeName | screenshot | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | enclosingFunctionBody | tainted dir/ parseTorrent torrent name .torrent.data browser puppeteer launch page browser newPage page pdf path tainted format a4 pages browser pages i 0 i something i pages i screenshot path tainted browser close | +| autogenerated/TaintedPath/pupeteer.js:13:29:13:45 | { path: tainted } | enclosingFunctionName | | +| autogenerated/TaintedPath/pupeteer.js:13:37:13:43 | tainted | calleeAccessPath | | +| autogenerated/TaintedPath/pupeteer.js:13:37:13:43 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/pupeteer.js:13:37:13:43 | tainted | enclosingFunctionBody | tainted dir/ parseTorrent torrent name .torrent.data browser puppeteer launch page browser newPage page pdf path tainted format a4 pages browser pages i 0 i something i pages i screenshot path tainted browser close | +| autogenerated/TaintedPath/pupeteer.js:13:37:13:43 | tainted | enclosingFunctionName | | +| autogenerated/TaintedPath/tainted-access-paths.js:1:18:1:21 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:1:18:1:21 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-access-paths.js:1:18:1:21 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-access-paths.js:1:18:1:21 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/tainted-access-paths.js:2:20:2:25 | 'http' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:2:20:2:25 | 'http' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-access-paths.js:2:20:2:25 | 'http' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-access-paths.js:2:20:2:25 | 'http' | calleeName | require | +| autogenerated/TaintedPath/tainted-access-paths.js:3:19:3:23 | 'url' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:3:19:3:23 | 'url' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-access-paths.js:3:19:3:23 | 'url' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-access-paths.js:3:19:3:23 | 'url' | calleeName | require | +| autogenerated/TaintedPath/tainted-access-paths.js:5:32:32:1 | functio ... OT OK\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:5:32:32:1 | functio ... OT OK\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/tainted-access-paths.js:5:32:32:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:5:32:32:1 | functio ... OT OK\\n} | calleeApiName | http | +| autogenerated/TaintedPath/tainted-access-paths.js:5:32:32:1 | functio ... OT OK\\n} | calleeName | createServer | +| autogenerated/TaintedPath/tainted-access-paths.js:5:32:32:1 | functio ... OT OK\\n} | receiverName | http | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:6:24:6:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | calleeName | parse | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:6:33:6:36 | true | receiverName | url | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:8:19:8:22 | path | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:12:19:12:25 | obj.sub | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:16:19:16:25 | obj.sub | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:20:21:20:28 | obj.sub2 | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:26:19:26:26 | obj.sub3 | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:29:21:29:28 | obj.sub4 | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:30:23:30:30 | obj.sub4 | receiverName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path obj bla something path fs readFileSync obj sub obj sub safe fs readFileSync obj sub obj sub2 safe random fs readFileSync obj sub2 random obj sub3 safe fs readFileSync obj sub3 obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 fs readFileSync obj sub4 | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-access-paths.js:31:23:31:30 | obj.sub4 | receiverName | fs | +| autogenerated/TaintedPath/tainted-array-steps.js:1:18:1:21 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:1:18:1:21 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:1:18:1:21 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:1:18:1:21 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/tainted-array-steps.js:2:20:2:25 | 'http' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:2:20:2:25 | 'http' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:2:20:2:25 | 'http' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:2:20:2:25 | 'http' | calleeName | require | +| autogenerated/TaintedPath/tainted-array-steps.js:3:19:3:23 | 'url' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:3:19:3:23 | 'url' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:3:19:3:23 | 'url' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:3:19:3:23 | 'url' | calleeName | require | +| autogenerated/TaintedPath/tainted-array-steps.js:4:24:4:42 | 'sanitize-filename' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:4:24:4:42 | 'sanitize-filename' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:4:24:4:42 | 'sanitize-filename' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:4:24:4:42 | 'sanitize-filename' | calleeName | require | +| autogenerated/TaintedPath/tainted-array-steps.js:5:26:5:31 | 'path' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:5:26:5:31 | 'path' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:5:26:5:31 | 'path' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:5:26:5:31 | 'path' | calleeName | require | +| autogenerated/TaintedPath/tainted-array-steps.js:8:32:15:1 | functio ... ENCY]\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:8:32:15:1 | functio ... ENCY]\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/tainted-array-steps.js:8:32:15:1 | functio ... ENCY]\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:8:32:15:1 | functio ... ENCY]\\n} | calleeApiName | http | +| autogenerated/TaintedPath/tainted-array-steps.js:8:32:15:1 | functio ... ENCY]\\n} | calleeName | createServer | +| autogenerated/TaintedPath/tainted-array-steps.js:8:32:15:1 | functio ... ENCY]\\n} | receiverName | http | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:9:24:9:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | calleeName | parse | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:9:33:9:36 | true | receiverName | url | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | calleeApiName | http | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | calleeName | write | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:10:13:10:55 | fs.read ... n('/')) | receiverName | res | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:10:29:10:54 | ['publi ... in('/') | receiverName | fs | +| autogenerated/TaintedPath/tainted-array-steps.js:10:51:10:53 | '/' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:10:51:10:53 | '/' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:10:51:10:53 | '/' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:10:51:10:53 | '/' | calleeName | join | +| autogenerated/TaintedPath/tainted-array-steps.js:10:51:10:53 | '/' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:10:51:10:53 | '/' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | calleeName | map | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:13:21:13:40 | x => x.toLowerCase() | receiverName | parts | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | calleeApiName | http | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | calleeName | write | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:14:13:14:44 | fs.read ... n('/')) | receiverName | res | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:14:29:14:43 | parts.join('/') | receiverName | fs | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | calleeName | join | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync public path join / parts public path parts parts map x x toLowerCase res write fs readFileSync parts join / | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-array-steps.js:14:40:14:42 | '/' | receiverName | parts | +| autogenerated/TaintedPath/tainted-require.js:1:23:1:31 | 'express' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-require.js:1:23:1:31 | 'express' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-require.js:1:23:1:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-require.js:1:23:1:31 | 'express' | calleeName | require | +| autogenerated/TaintedPath/tainted-require.js:5:9:5:20 | '/some/path' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-require.js:5:9:5:20 | '/some/path' | calleeAccessPath | express get | +| autogenerated/TaintedPath/tainted-require.js:5:9:5:20 | '/some/path' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/tainted-require.js:5:9:5:20 | '/some/path' | calleeApiName | express | +| autogenerated/TaintedPath/tainted-require.js:5:9:5:20 | '/some/path' | calleeName | get | +| autogenerated/TaintedPath/tainted-require.js:5:9:5:20 | '/some/path' | receiverName | app | +| autogenerated/TaintedPath/tainted-require.js:5:23:8:1 | functio ... e"));\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-require.js:5:23:8:1 | functio ... e"));\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/tainted-require.js:5:23:8:1 | functio ... e"));\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/tainted-require.js:5:23:8:1 | functio ... e"));\\n} | calleeApiName | express | +| autogenerated/TaintedPath/tainted-require.js:5:23:8:1 | functio ... e"));\\n} | calleeName | get | +| autogenerated/TaintedPath/tainted-require.js:5:23:8:1 | functio ... e"));\\n} | receiverName | app | +| autogenerated/TaintedPath/tainted-require.js:7:19:7:37 | req.param("module") | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-require.js:7:19:7:37 | req.param("module") | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-require.js:7:19:7:37 | req.param("module") | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-require.js:7:19:7:37 | req.param("module") | calleeName | require | +| autogenerated/TaintedPath/tainted-require.js:7:19:7:37 | req.param("module") | enclosingFunctionBody | req res m require req param module | +| autogenerated/TaintedPath/tainted-require.js:7:19:7:37 | req.param("module") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | calleeName | param | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | enclosingFunctionBody | req res m require req param module | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-require.js:7:29:7:36 | "module" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:1:23:1:31 | 'express' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:1:23:1:31 | 'express' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-sendFile.js:1:23:1:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-sendFile.js:1:23:1:31 | 'express' | calleeName | require | +| autogenerated/TaintedPath/tainted-sendFile.js:2:12:2:26 | require('path') | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-sendFile.js:2:12:2:26 | require('path') | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-sendFile.js:2:20:2:25 | 'path' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:2:20:2:25 | 'path' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-sendFile.js:2:20:2:25 | 'path' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-sendFile.js:2:20:2:25 | 'path' | calleeName | require | +| autogenerated/TaintedPath/tainted-sendFile.js:6:9:6:23 | '/some/path/:x' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:6:9:6:23 | '/some/path/:x' | calleeAccessPath | express get | +| autogenerated/TaintedPath/tainted-sendFile.js:6:9:6:23 | '/some/path/:x' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:6:9:6:23 | '/some/path/:x' | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:6:9:6:23 | '/some/path/:x' | calleeName | get | +| autogenerated/TaintedPath/tainted-sendFile.js:6:9:6:23 | '/some/path/:x' | receiverName | app | +| autogenerated/TaintedPath/tainted-sendFile.js:6:26:28:1 | functio ... ata/'\\n} | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:6:26:28:1 | functio ... ata/'\\n} | calleeAccessPath | express get | +| autogenerated/TaintedPath/tainted-sendFile.js:6:26:28:1 | functio ... ata/'\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:6:26:28:1 | functio ... ata/'\\n} | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:6:26:28:1 | functio ... ata/'\\n} | calleeName | get | +| autogenerated/TaintedPath/tainted-sendFile.js:6:26:28:1 | functio ... ata/'\\n} | receiverName | app | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:8:16:8:33 | req.param("gimme") | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | calleeName | param | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:8:26:8:32 | "gimme" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | calleeAccessPath | express get res sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendfile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | calleeName | sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:10:16:10:33 | req.param("gimme") | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | calleeName | param | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:10:26:10:32 | "gimme" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:13:16:13:33 | req.param("gimme") | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | calleeName | param | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:13:26:13:32 | "gimme" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:13:36:13:58 | { root: ... cwd() } | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:13:44:13:56 | process.cwd() | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-sendFile.js:13:44:13:56 | process.cwd() | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-sendFile.js:13:44:13:56 | process.cwd() | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:13:44:13:56 | process.cwd() | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | calleeAccessPath | express get res sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendfile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | calleeName | sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:15:16:15:33 | req.param("gimme") | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | calleeName | param | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:15:26:15:32 | "gimme" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | calleeAccessPath | express get res sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendfile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | calleeName | sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:15:36:15:58 | { root: ... cwd() } | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:15:44:15:56 | process.cwd() | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-sendFile.js:15:44:15:56 | process.cwd() | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-sendFile.js:15:44:15:56 | process.cwd() | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:15:44:15:56 | process.cwd() | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:18:16:18:32 | req.param("file") | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | calleeName | param | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:18:26:18:31 | "file" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:18:35:18:60 | { root: ... dir") } | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:18:43:18:58 | req.param("dir") | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-sendFile.js:18:43:18:58 | req.param("dir") | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-sendFile.js:18:43:18:58 | req.param("dir") | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:18:43:18:58 | req.param("dir") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | calleeAccessPath | express get req param | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | calleeName | param | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:18:53:18:57 | "dir" | receiverName | req | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | calleeName | resolve | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:20:30:20:32 | '.' | receiverName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:21:16:21:48 | homeDir ... arams.x | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | calleeAccessPath | express get res sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendfile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | calleeName | sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:22:16:22:37 | 'data/' ... arams.x | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:24:16:24:49 | path.re ... rams.x) | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | calleeName | resolve | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:24:29:24:34 | 'data' | receiverName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | calleeAccessPath | path resolve | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | calleeAccessPathWithStructuralInfo | path member resolve instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | calleeName | resolve | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:24:37:24:48 | req.params.x | receiverName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | calleeAccessPath | express get res sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendfile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | calleeName | sendfile | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:25:16:25:46 | path.jo ... rams.x) | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | calleeAccessPath | path join | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | calleeName | join | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:25:26:25:31 | 'data' | receiverName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | calleeAccessPath | path join | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | calleeName | join | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:25:34:25:45 | req.params.x | receiverName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | calleeAccessPath | express get res sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member sendFile instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | calleeApiName | express | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | calleeName | sendFile | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:27:16:27:56 | homeDir ... rams.x) | receiverName | res | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | calleeAccessPath | path join | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | calleeName | join | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:27:36:27:41 | 'data' | receiverName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | calleeAccessPath | path join | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | calleeAccessPathWithStructuralInfo | path member join instanceorreturn | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | calleeApiName | path | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | calleeName | join | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | enclosingFunctionBody | req res res sendFile req param gimme res sendfile req param gimme res sendFile req param gimme root process cwd res sendfile req param gimme root process cwd res sendFile req param file root req param dir homeDir path resolve . res sendFile homeDir /data/ req params x res sendfile data/ req params x res sendFile path resolve data req params x res sendfile path join data req params x res sendFile homeDir path join data req params x | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | enclosingFunctionName | app.get#functionalargument | +| autogenerated/TaintedPath/tainted-sendFile.js:27:44:27:55 | req.params.x | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:1:18:1:21 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:1:18:1:21 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-string-steps.js:1:18:1:21 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-string-steps.js:1:18:1:21 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/tainted-string-steps.js:2:20:2:25 | 'http' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:2:20:2:25 | 'http' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-string-steps.js:2:20:2:25 | 'http' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-string-steps.js:2:20:2:25 | 'http' | calleeName | require | +| autogenerated/TaintedPath/tainted-string-steps.js:3:19:3:23 | 'url' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:3:19:3:23 | 'url' | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-string-steps.js:3:19:3:23 | 'url' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-string-steps.js:3:19:3:23 | 'url' | calleeName | require | +| autogenerated/TaintedPath/tainted-string-steps.js:5:32:29:1 | functio ... ENCY]\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:5:32:29:1 | functio ... ENCY]\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/tainted-string-steps.js:5:32:29:1 | functio ... ENCY]\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:5:32:29:1 | functio ... ENCY]\\n} | calleeApiName | http | +| autogenerated/TaintedPath/tainted-string-steps.js:5:32:29:1 | functio ... ENCY]\\n} | calleeName | createServer | +| autogenerated/TaintedPath/tainted-string-steps.js:5:32:29:1 | functio ... ENCY]\\n} | receiverName | http | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:6:24:6:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | calleeName | parse | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:6:33:6:36 | true | receiverName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:7:18:7:37 | path.substring(i, j) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | calleeAccessPath | url parse query path substring | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member substring instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | calleeName | substring | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:7:33:7:33 | i | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | calleeAccessPath | url parse query path substring | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member substring instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | calleeName | substring | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:7:36:7:36 | j | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:8:18:8:34 | path.substring(4) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | calleeAccessPath | url parse query path substring | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member substring instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | calleeName | substring | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:8:33:8:33 | 4 | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | calleeAccessPath | url parse query path substring | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member substring instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | calleeName | substring | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:9:33:9:33 | 0 | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | calleeAccessPath | url parse query path substring | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member substring instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | calleeName | substring | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:9:36:9:36 | i | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:10:18:10:31 | path.substr(4) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | calleeAccessPath | url parse query path substr | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member substr instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | calleeName | substr | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:10:30:10:30 | 4 | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:11:18:11:30 | path.slice(4) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | calleeAccessPath | url parse query path slice | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member slice instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | calleeName | slice | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:11:29:11:29 | 4 | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:13:18:13:37 | path.concat(unknown) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | calleeAccessPath | url parse query path concat | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member concat instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | calleeName | concat | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:13:30:13:36 | unknown | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:14:18:14:37 | unknown.concat(path) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | calleeName | concat | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:14:33:14:36 | path | receiverName | unknown | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:15:18:15:46 | unknown ... , path) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | calleeName | concat | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:15:33:15:39 | unknown | receiverName | unknown | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | argumentIndex | 1 | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | calleeAccessPath | | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | calleeName | concat | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:15:42:15:45 | path | receiverName | unknown | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:17:18:17:28 | path.trim() | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:18:18:18:35 | path.toLowerCase() | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:20:18:20:32 | path.split('/') | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:20:29:20:31 | '/' | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:21:18:21:35 | path.split('/')[0] | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:21:29:21:31 | '/' | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:22:18:22:35 | path.split('/')[i] | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:22:29:22:31 | '/' | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:23:18:23:36 | path.split(/\\//)[i] | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:23:29:23:32 | /\\// | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:24:18:24:35 | path.split("?")[0] | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:24:29:24:31 | "?" | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:25:18:25:39 | path.sp ... own)[i] | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:25:29:25:35 | unknown | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:26:29:26:35 | unknown | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:27:18:27:36 | path.split(unknown) | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:27:29:27:35 | unknown | receiverName | path | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | calleeApiName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | calleeName | readFileSync | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:28:18:28:35 | path.split("?")[i] | receiverName | fs | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | argumentIndex | 0 | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | calleeAccessPath | url parse query path split | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn member query member path member split instanceorreturn | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | calleeApiName | url | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | calleeName | split | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | enclosingFunctionBody | req res path url parse req url true query path fs readFileSync path substring i j fs readFileSync path substring 4 fs readFileSync path substring 0 i fs readFileSync path substr 4 fs readFileSync path slice 4 fs readFileSync path concat unknown fs readFileSync unknown concat path fs readFileSync unknown concat unknown path fs readFileSync path trim fs readFileSync path toLowerCase fs readFileSync path split / fs readFileSync path 0 split / 0 fs readFileSync path split / i fs readFileSync path split /\\// i fs readFileSync path 0 split ? 0 fs readFileSync path split unknown i fs readFileSync path split unknown whatever fs readFileSync path split unknown fs readFileSync path split ? i | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/tainted-string-steps.js:28:29:28:31 | "?" | receiverName | path | +| autogenerated/TaintedPath/torrents.js:1:30:1:44 | 'parse-torrent' | argumentIndex | 0 | +| autogenerated/TaintedPath/torrents.js:1:30:1:44 | 'parse-torrent' | calleeAccessPath | | +| autogenerated/TaintedPath/torrents.js:1:30:1:44 | 'parse-torrent' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/torrents.js:1:30:1:44 | 'parse-torrent' | calleeName | require | +| autogenerated/TaintedPath/torrents.js:2:20:2:23 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/torrents.js:2:20:2:23 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/torrents.js:2:20:2:23 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/torrents.js:2:20:2:23 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | argumentIndex | 0 | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | calleeAccessPath | parse-torrent | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | calleeAccessPathWithStructuralInfo | parse-torrent instanceorreturn | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | calleeApiName | parse-torrent | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | calleeName | parseTorrent | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | enclosingFunctionBody | dir torrent name parseTorrent torrent name loc dir / name .torrent.data fs readFileSync loc | +| autogenerated/TaintedPath/torrents.js:5:26:5:32 | torrent | enclosingFunctionName | getTorrentData | +| autogenerated/TaintedPath/torrents.js:6:12:6:20 | dir + "/" | calleeAccessPath | | +| autogenerated/TaintedPath/torrents.js:6:12:6:20 | dir + "/" | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/torrents.js:6:12:6:20 | dir + "/" | enclosingFunctionBody | dir torrent name parseTorrent torrent name loc dir / name .torrent.data fs readFileSync loc | +| autogenerated/TaintedPath/torrents.js:6:12:6:20 | dir + "/" | enclosingFunctionName | getTorrentData | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | argumentIndex | 0 | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | calleeApiName | fs | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | calleeName | readFileSync | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | enclosingFunctionBody | dir torrent name parseTorrent torrent name loc dir / name .torrent.data fs readFileSync loc | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | enclosingFunctionName | getTorrentData | +| autogenerated/TaintedPath/torrents.js:7:25:7:27 | loc | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:1:18:1:21 | 'fs' | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:1:18:1:21 | 'fs' | calleeAccessPath | | +| autogenerated/TaintedPath/typescript.ts:1:18:1:21 | 'fs' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/typescript.ts:1:18:1:21 | 'fs' | calleeName | require | +| autogenerated/TaintedPath/typescript.ts:2:20:2:25 | 'http' | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:2:20:2:25 | 'http' | calleeAccessPath | | +| autogenerated/TaintedPath/typescript.ts:2:20:2:25 | 'http' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/typescript.ts:2:20:2:25 | 'http' | calleeName | require | +| autogenerated/TaintedPath/typescript.ts:3:19:3:23 | 'url' | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:3:19:3:23 | 'url' | calleeAccessPath | | +| autogenerated/TaintedPath/typescript.ts:3:19:3:23 | 'url' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/typescript.ts:3:19:3:23 | 'url' | calleeName | require | +| autogenerated/TaintedPath/typescript.ts:4:24:4:42 | 'sanitize-filename' | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:4:24:4:42 | 'sanitize-filename' | calleeAccessPath | | +| autogenerated/TaintedPath/typescript.ts:4:24:4:42 | 'sanitize-filename' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/typescript.ts:4:24:4:42 | 'sanitize-filename' | calleeName | require | +| autogenerated/TaintedPath/typescript.ts:5:26:5:31 | 'path' | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:5:26:5:31 | 'path' | calleeAccessPath | | +| autogenerated/TaintedPath/typescript.ts:5:26:5:31 | 'path' | calleeAccessPathWithStructuralInfo | | +| autogenerated/TaintedPath/typescript.ts:5:26:5:31 | 'path' | calleeName | require | +| autogenerated/TaintedPath/typescript.ts:8:32:34:1 | functio ... nted\\n\\n} | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:8:32:34:1 | functio ... nted\\n\\n} | calleeAccessPath | http createServer | +| autogenerated/TaintedPath/typescript.ts:8:32:34:1 | functio ... nted\\n\\n} | calleeAccessPathWithStructuralInfo | http member createServer instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:8:32:34:1 | functio ... nted\\n\\n} | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:8:32:34:1 | functio ... nted\\n\\n} | calleeName | createServer | +| autogenerated/TaintedPath/typescript.ts:8:32:34:1 | functio ... nted\\n\\n} | receiverName | http | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | calleeAccessPath | url parse | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | calleeApiName | url | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | calleeName | parse | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:9:24:9:30 | req.url | receiverName | url | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | argumentIndex | 1 | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | calleeAccessPath | url parse | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | calleeAccessPathWithStructuralInfo | url member parse instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | calleeApiName | url | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | calleeName | parse | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:9:33:9:36 | true | receiverName | url | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:12:13:12:33 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:12:29:12:32 | path | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:15:15:15:35 | fs.read ... c(path) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:15:31:15:34 | path | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:18:23:18:44 | fs.read ... (path2) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:18:39:18:43 | path2 | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:21:23:21:44 | fs.read ... (path3) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:21:39:21:43 | path3 | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:24:23:24:44 | fs.read ... (path4) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:24:39:24:43 | path4 | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:28:13:28:34 | fs.read ... (path5) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:28:29:28:33 | path5 | receiverName | fs | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | calleeAccessPath | http createServer res write | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | calleeAccessPathWithStructuralInfo | http member createServer functionalarg param res member write instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | calleeApiName | http | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | calleeName | write | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:32:13:32:34 | fs.read ... (path6) | receiverName | res | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | argumentIndex | 0 | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | calleeAccessPath | fs readFileSync | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | calleeAccessPathWithStructuralInfo | fs member readFileSync instanceorreturn | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | calleeApiName | fs | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | calleeName | readFileSync | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | enclosingFunctionBody | req res path url parse req url true query path res write fs readFileSync path path foo.txt res write fs readFileSync path path2 path path2 res write fs readFileSync path2 path3 path path3 res write fs readFileSync path3 path4 path path4 res write fs readFileSync path4 path5 path path5 clean res write fs readFileSync path5 path6 path path6 clean res write fs readFileSync path6 | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | enclosingFunctionName | http.createServer#functionalargument | +| autogenerated/TaintedPath/typescript.ts:32:29:32:33 | path6 | receiverName | fs | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | argumentIndex | 0 | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | calleeAccessPath | express get res render | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param res member render instanceorreturn | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | calleeApiName | express | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | calleeName | render | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | enclosingFunctionBody | req res res render req 0 params 0 | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | enclosingFunctionName | exports | +| autogenerated/TaintedPath/views.js:1:43:1:55 | req.params[0] | receiverName | res | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:23:1:31 | 'message' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:23:1:31 | 'message' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:23:1:31 | 'message' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:23:1:31 | 'message' | calleeName | addEventListener | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:34:3:1 | functio ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:34:3:1 | functio ... OT OK\\n} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:34:3:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:1:34:3:1 | functio ... OT OK\\n} | calleeName | addEventListener | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | calleeName | write | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | enclosingFunctionBody | event document write event data | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | enclosingFunctionName | addEventListener#functionalargument | +| autogenerated/Xss/DomBasedXss/addEventListener.js:2:20:2:29 | event.data | receiverName | document | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:23:5:31 | 'message' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:23:5:31 | 'message' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:23:5:31 | 'message' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:23:5:31 | 'message' | calleeName | addEventListener | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:34:7:1 | functio ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:34:7:1 | functio ... OT OK\\n} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:34:7:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:5:34:7:1 | functio ... OT OK\\n} | calleeName | addEventListener | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | calleeName | write | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | enclosingFunctionBody | data document write data | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | enclosingFunctionName | addEventListener#functionalargument | +| autogenerated/Xss/DomBasedXss/addEventListener.js:6:20:6:23 | data | receiverName | document | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | calleeName | write | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:11:24:11:29 | x.data | receiverName | document | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | calleeName | write | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:12:24:12:33 | event.data | receiverName | document | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | calleeName | write | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:13:24:13:29 | y.data | receiverName | document | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | calleeName | addEventListener | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:29:16:37 | "message" | receiverName | window | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | calleeName | addEventListener | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:40:16:70 | foo.bin ... tems'}) | receiverName | window | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | calleeName | bind | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:49:16:52 | null | receiverName | foo | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | calleeName | bind | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:55:16:69 | {data: 'items'} | receiverName | foo | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:62:16:68 | 'items' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:62:16:68 | 'items' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:62:16:68 | 'items' | enclosingFunctionBody | foo x event y document write x data document write event data document write y data window addEventListener message foo bind null data items | +| autogenerated/Xss/DomBasedXss/addEventListener.js:16:62:16:68 | 'items' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:7:13:7:22 | 'app-root' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:7:13:7:22 | 'app-root' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:8:16:8:37 | './app. ... t.html' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:8:16:8:37 | './app. ... t.html' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:9:14:9:36 | ['./app ... t.css'] | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:9:14:9:36 | ['./app ... t.css'] | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:9:15:9:35 | './app. ... nt.css' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:9:15:9:35 | './app. ... nt.css' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:22:44:22:71 | \\u0275getDOM ... ().href | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:24:44:24:73 | this.ro ... ams.foo | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:25:44:25:78 | this.ro ... ams.foo | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:26:44:26:71 | this.ro ... ragment | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:44:27:82 | this.ro ... ('foo') | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | calleeAccessPath | @angular/router ActivatedRoute snapshot paramMap get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | calleeAccessPathWithStructuralInfo | @angular/router member ActivatedRoute instanceorreturn member snapshot member paramMap member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | calleeApiName | @angular/router | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | calleeName | get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:27:77:27:81 | 'foo' | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:44:28:87 | this.ro ... ('foo') | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | calleeAccessPath | @angular/router ActivatedRoute snapshot queryParamMap get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | calleeAccessPathWithStructuralInfo | @angular/router member ActivatedRoute instanceorreturn member snapshot member queryParamMap member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | calleeApiName | @angular/router | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | calleeName | get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:28:82:28:86 | 'foo' | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | calleeAccessPath | @angular/router ActivatedRoute paramMap subscribe | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | calleeAccessPathWithStructuralInfo | @angular/router member ActivatedRoute instanceorreturn member paramMap member subscribe instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | calleeApiName | @angular/router | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | calleeName | subscribe | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:29:35:31:5 | map => ... K\\n } | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:46:30:59 | map.get('foo') | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | calleeAccessPath | @angular/router ActivatedRoute paramMap subscribe map get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | calleeAccessPathWithStructuralInfo | @angular/router member ActivatedRoute instanceorreturn member paramMap member subscribe functionalarg param map member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | calleeApiName | @angular/router | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | calleeName | get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:30:54:30:58 | 'foo' | receiverName | map | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:33:44:33:74 | this.ro ... 1].path | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:34:44:34:82 | this.ro ... eters.x | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:44:35:91 | this.ro ... et('x') | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | calleeAccessPath | @angular/router ActivatedRoute snapshot url parameterMap get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | calleeAccessPathWithStructuralInfo | @angular/router member ActivatedRoute instanceorreturn member snapshot member url member member parameterMap member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | calleeApiName | @angular/router | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | calleeName | get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:35:88:35:90 | 'x' | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:36:44:36:91 | this.ro ... arams.x | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:38:44:38:58 | this.router.url | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | calleeAccessPath | @angular/core DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | calleeAccessPathWithStructuralInfo | @angular/core member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | calleeApiName | @angular/core | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | enclosingFunctionBody | sanitizer bypassSecurityTrustHtml \u0275getDOM getLocation href sanitizer bypassSecurityTrustHtml route snapshot params foo sanitizer bypassSecurityTrustHtml route snapshot queryParams foo sanitizer bypassSecurityTrustHtml route snapshot fragment sanitizer bypassSecurityTrustHtml route snapshot paramMap get foo sanitizer bypassSecurityTrustHtml route snapshot queryParamMap get foo route paramMap subscribe map sanitizer bypassSecurityTrustHtml map get foo sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 path sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameters x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap get x sanitizer bypassSecurityTrustHtml 1 route snapshot url 1 parameterMap params x sanitizer bypassSecurityTrustHtml router url sanitizer2 bypassSecurityTrustHtml router url | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:40:45:40:59 | this.router.url | enclosingFunctionName | ngOnInit | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | calleeAccessPath | @angular/platform-browser DomSanitizer bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | calleeAccessPathWithStructuralInfo | @angular/platform-browser member DomSanitizer instanceorreturn member bypassSecurityTrustHtml instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | calleeApiName | @angular/platform-browser | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | calleeName | bypassSecurityTrustHtml | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | enclosingFunctionBody | routeSnapshot ActivatedRouteSnapshot sanitizer bypassSecurityTrustHtml routeSnapshot paramMap get foo | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:44:44:76 | routeSn ... ('foo') | enclosingFunctionName | someMethod | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | calleeAccessPath | @angular/router ActivatedRouteSnapshot paramMap get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | calleeAccessPathWithStructuralInfo | @angular/router member ActivatedRouteSnapshot instanceorreturn member paramMap member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | calleeApiName | @angular/router | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | calleeName | get | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | enclosingFunctionBody | routeSnapshot ActivatedRouteSnapshot sanitizer bypassSecurityTrustHtml routeSnapshot paramMap get foo | +| autogenerated/Xss/DomBasedXss/angular2-client.ts:44:71:44:75 | 'foo' | enclosingFunctionName | someMethod | +| autogenerated/Xss/DomBasedXss/classnames.js:7:31:7:84 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:7:31:7:84 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:7:31:7:84 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:7:31:7:84 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:7:32:7:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:7:32:7:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:7:47:7:69 | classNa ... w.name) | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | calleeAccessPath | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | calleeAccessPathWithStructuralInfo | classnames instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | calleeApiName | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | calleeName | classNames | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:7:58:7:68 | window.name | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:7:71:7:83 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:7:71:7:83 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:7:71:7:83 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:7:71:7:83 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:8:31:8:85 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:8:31:8:85 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:8:31:8:85 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:8:31:8:85 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:8:32:8:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:8:32:8:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:8:47:8:70 | classNa ... w.name) | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | calleeAccessPath | classnames/dedupe | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | calleeAccessPathWithStructuralInfo | classnames/dedupe instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | calleeApiName | classnames/dedupe | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | calleeName | classNamesD | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:8:59:8:69 | window.name | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:8:72:8:84 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:8:72:8:84 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:8:72:8:84 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:8:72:8:84 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:9:31:9:85 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:9:31:9:85 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:9:31:9:85 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:9:31:9:85 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:9:32:9:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:9:32:9:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:9:47:9:70 | classNa ... w.name) | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | calleeAccessPath | classnames/bind | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | calleeAccessPathWithStructuralInfo | classnames/bind instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | calleeApiName | classnames/bind | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | calleeName | classNamesB | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:9:59:9:69 | window.name | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:9:72:9:84 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:9:72:9:84 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:9:72:9:84 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:9:72:9:84 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | calleeAccessPath | classnames bind | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | calleeAccessPathWithStructuralInfo | classnames member bind instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | calleeApiName | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | calleeName | bind | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:10:39:10:56 | {foo: window.name} | receiverName | classNames | +| autogenerated/Xss/DomBasedXss/classnames.js:10:45:10:55 | window.name | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:10:45:10:55 | window.name | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:10:45:10:55 | window.name | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:10:45:10:55 | window.name | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:11:31:11:79 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:11:31:11:79 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:11:31:11:79 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:11:31:11:79 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:11:32:11:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:11:32:11:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:11:47:11:64 | unsafeStyle('foo') | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | calleeAccessPath | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | calleeAccessPathWithStructuralInfo | classnames instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | calleeApiName | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | calleeName | unsafeStyle | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:11:59:11:63 | 'foo' | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:11:66:11:78 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:11:66:11:78 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:11:66:11:78 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:11:66:11:78 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | calleeAccessPath | classnames bind | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | calleeAccessPathWithStructuralInfo | classnames member bind instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | calleeApiName | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | calleeName | bind | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:12:37:12:38 | {} | receiverName | classNames | +| autogenerated/Xss/DomBasedXss/classnames.js:13:31:13:83 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:13:31:13:83 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:13:31:13:83 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:13:31:13:83 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:13:32:13:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:13:32:13:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:13:47:13:68 | safeSty ... w.name) | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | calleeAccessPath | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | calleeAccessPathWithStructuralInfo | classnames instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | calleeApiName | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | calleeName | safeStyle | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:13:57:13:67 | window.name | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:13:70:13:82 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:13:70:13:82 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:13:70:13:82 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:13:70:13:82 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:14:31:14:77 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:14:31:14:77 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:14:31:14:77 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:14:31:14:77 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:14:32:14:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:14:32:14:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:14:47:14:62 | safeStyle('foo') | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | calleeAccessPath | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | calleeAccessPathWithStructuralInfo | classnames instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | calleeApiName | classnames | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | calleeName | safeStyle | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:14:57:14:61 | 'foo' | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:14:64:14:76 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:14:64:14:76 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:14:64:14:76 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:14:64:14:76 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:15:31:15:78 | `` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:15:31:15:78 | `` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:15:31:15:78 | `` | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:15:31:15:78 | `` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:15:32:15:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:15:32:15:44 | Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:15:47:15:63 | clsx(window.name) | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | calleeAccessPath | clsx | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | calleeAccessPathWithStructuralInfo | clsx instanceorreturn | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | calleeApiName | clsx | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | calleeName | clsx | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:15:52:15:62 | window.name | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/classnames.js:15:65:15:77 | ">Hello | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/classnames.js:15:65:15:77 | ">Hello | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/classnames.js:15:65:15:77 | ">Hello | enclosingFunctionBody | document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello unsafeStyle classNames bind foo window name document body innerHTML Hello safeStyle classNames bind document body innerHTML Hello document body innerHTML Hello document body innerHTML Hello | +| autogenerated/Xss/DomBasedXss/classnames.js:15:65:15:77 | ">Hello | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/d3.js:1:20:1:23 | 'd3' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:1:20:1:23 | 'd3' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/d3.js:1:20:1:23 | 'd3' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/d3.js:1:20:1:23 | 'd3' | calleeName | require | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | calleeAccessPath | d3 select | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | calleeName | select | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:8:15:8:21 | '#main' | receiverName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | calleeAccessPath | d3 select attr | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | calleeName | attr | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:9:15:9:21 | 'width' | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | calleeAccessPath | d3 select attr | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | calleeName | attr | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:9:24:9:26 | 100 | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | calleeAccessPath | d3 select attr style | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | calleeName | style | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:10:16:10:22 | 'color' | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | calleeAccessPath | d3 select attr style | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | calleeName | style | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:10:25:10:29 | 'red' | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | calleeAccessPath | d3 select attr style html | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | calleeName | html | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:11:15:11:24 | getTaint() | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | calleeAccessPath | d3 select attr style html html | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | calleeName | html | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:12:15:12:29 | d => getTaint() | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | calleeAccessPath | d3 select attr style html html call | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn member call instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | calleeName | call | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:13:15:13:27 | otherFunction | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | calleeAccessPath | d3 select attr style html html html | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn instanceorreturn member html instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | calleeName | html | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | enclosingFunctionBody | d3 select #main attr width 100 style color red html getTaint html d getTaint call otherFunction html d getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:14:15:14:29 | d => getTaint() | enclosingFunctionName | doSomething | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | calleeAccessPath | d3 select attr style html html call selection attr d3 select attr style html html selection attr | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn functionalarg param selection member attr instanceorreturn d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn member call functionalarg param selection member attr instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | calleeName | attr | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | enclosingFunctionBody | selection selection attr foo bar html getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | enclosingFunctionName | otherFunction | +| autogenerated/Xss/DomBasedXss/d3.js:20:15:20:19 | 'foo' | receiverName | selection | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | calleeAccessPath | d3 select attr style html html call selection attr d3 select attr style html html selection attr | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn functionalarg param selection member attr instanceorreturn d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn member call functionalarg param selection member attr instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | calleeName | attr | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | enclosingFunctionBody | selection selection attr foo bar html getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | enclosingFunctionName | otherFunction | +| autogenerated/Xss/DomBasedXss/d3.js:20:22:20:26 | 'bar' | receiverName | selection | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | calleeAccessPath | d3 select attr style html html call selection attr html d3 select attr style html html selection attr html | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | calleeAccessPathWithStructuralInfo | d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn functionalarg param selection member attr instanceorreturn member html instanceorreturn d3 member select instanceorreturn member attr instanceorreturn member style instanceorreturn member html instanceorreturn member html instanceorreturn member call functionalarg param selection member attr instanceorreturn member html instanceorreturn | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | calleeApiName | d3 | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | calleeName | html | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | enclosingFunctionBody | selection selection attr foo bar html getTaint | +| autogenerated/Xss/DomBasedXss/d3.js:21:15:21:24 | getTaint() | enclosingFunctionName | otherFunction | +| autogenerated/Xss/DomBasedXss/dates.js:9:36:9:68 | window. ... ring(1) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:9:36:9:68 | window. ... ring(1) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:9:36:9:68 | window. ... ring(1) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:9:36:9:68 | window. ... ring(1) | calleeName | decodeURIComponent | +| autogenerated/Xss/DomBasedXss/dates.js:9:36:9:68 | window. ... ring(1) | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:9:36:9:68 | window. ... ring(1) | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:9:67:9:67 | 1 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:9:67:9:67 | 1 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:9:67:9:67 | 1 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:9:67:9:67 | 1 | calleeName | substring | +| autogenerated/Xss/DomBasedXss/dates.js:9:67:9:67 | 1 | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:9:67:9:67 | 1 | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:11:31:11:70 | `Time i ... aint)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:11:31:11:70 | `Time i ... aint)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:11:31:11:70 | `Time i ... aint)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:11:31:11:70 | `Time i ... aint)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | calleeAccessPath | date-fns format | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | calleeAccessPathWithStructuralInfo | date-fns member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | calleeApiName | date-fns | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:11:57:11:60 | time | receiverName | dateFns | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | calleeAccessPath | date-fns format | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | calleeAccessPathWithStructuralInfo | date-fns member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | calleeApiName | date-fns | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:11:63:11:67 | taint | receiverName | dateFns | +| autogenerated/Xss/DomBasedXss/dates.js:12:31:12:73 | `Time i ... aint)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:12:31:12:73 | `Time i ... aint)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:12:31:12:73 | `Time i ... aint)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:12:31:12:73 | `Time i ... aint)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | calleeAccessPath | date-fns/esm format | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | calleeAccessPathWithStructuralInfo | date-fns/esm member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | calleeApiName | date-fns/esm | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:12:60:12:63 | time | receiverName | dateFnsEsm | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | calleeAccessPath | date-fns/esm format | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | calleeAccessPathWithStructuralInfo | date-fns/esm member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | calleeApiName | date-fns/esm | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:12:66:12:70 | taint | receiverName | dateFnsEsm | +| autogenerated/Xss/DomBasedXss/dates.js:13:31:13:72 | `Time i ... time)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:13:31:13:72 | `Time i ... time)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:13:31:13:72 | `Time i ... time)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:13:31:13:72 | `Time i ... time)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | calleeAccessPath | date-fns/fp format | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | calleeAccessPathWithStructuralInfo | date-fns/fp member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | calleeApiName | date-fns/fp | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:13:59:13:63 | taint | receiverName | dateFnsFp | +| autogenerated/Xss/DomBasedXss/dates.js:13:66:13:69 | time | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:13:66:13:69 | time | calleeAccessPath | date-fns/fp format | +| autogenerated/Xss/DomBasedXss/dates.js:13:66:13:69 | time | calleeAccessPathWithStructuralInfo | date-fns/fp member format instanceorreturn instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:13:66:13:69 | time | calleeApiName | date-fns/fp | +| autogenerated/Xss/DomBasedXss/dates.js:13:66:13:69 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:13:66:13:69 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:14:31:14:70 | `Time i ... time)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:14:31:14:70 | `Time i ... time)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:14:31:14:70 | `Time i ... time)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:14:31:14:70 | `Time i ... time)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | calleeAccessPath | date-fns format | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | calleeAccessPathWithStructuralInfo | date-fns member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | calleeApiName | date-fns | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:14:57:14:61 | taint | receiverName | dateFns | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | calleeAccessPath | date-fns format | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | calleeAccessPathWithStructuralInfo | date-fns member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | calleeApiName | date-fns | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:14:64:14:67 | time | receiverName | dateFns | +| autogenerated/Xss/DomBasedXss/dates.js:15:31:15:72 | `Time i ... aint)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:15:31:15:72 | `Time i ... aint)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:15:31:15:72 | `Time i ... aint)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:15:31:15:72 | `Time i ... aint)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | calleeAccessPath | date-fns/fp format | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | calleeAccessPathWithStructuralInfo | date-fns/fp member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | calleeApiName | date-fns/fp | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:15:59:15:62 | time | receiverName | dateFnsFp | +| autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint | calleeAccessPath | date-fns/fp format | +| autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint | calleeAccessPathWithStructuralInfo | date-fns/fp member format instanceorreturn instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint | calleeApiName | date-fns/fp | +| autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:15:65:15:69 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:16:31:16:69 | `Time i ... aint)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:16:31:16:69 | `Time i ... aint)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:16:31:16:69 | `Time i ... aint)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:16:31:16:69 | `Time i ... aint)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | calleeAccessPath | moment | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | calleeAccessPathWithStructuralInfo | moment instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | calleeApiName | moment | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | calleeName | moment | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:16:49:16:52 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | calleeAccessPath | moment format | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | calleeAccessPathWithStructuralInfo | moment instanceorreturn member format instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | calleeApiName | moment | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | calleeName | format | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:16:62:16:66 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:17:31:17:65 | `Time i ... mat()}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:17:31:17:65 | `Time i ... mat()}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:17:31:17:65 | `Time i ... mat()}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:17:31:17:65 | `Time i ... mat()}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | calleeAccessPath | moment | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | calleeAccessPathWithStructuralInfo | moment instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | calleeApiName | moment | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | calleeName | moment | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:17:49:17:53 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:18:31:18:66 | `Time i ... aint)}` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/dates.js:18:31:18:66 | `Time i ... aint)}` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/dates.js:18:31:18:66 | `Time i ... aint)}` | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:18:31:18:66 | `Time i ... aint)}` | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | calleeAccessPath | dateformat | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | calleeAccessPathWithStructuralInfo | dateformat instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | calleeApiName | dateformat | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | calleeName | dateformat | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:18:53:18:56 | time | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | calleeAccessPath | dateformat | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | calleeAccessPathWithStructuralInfo | dateformat instanceorreturn | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | calleeApiName | dateformat | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | calleeName | dateformat | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | enclosingFunctionBody | time Date taint decodeURIComponent window location hash substring 1 document body innerHTML Time is dateFns format time taint document body innerHTML Time is dateFnsEsm format time taint document body innerHTML Time is dateFnsFp format taint time document body innerHTML Time is dateFns format taint time document body innerHTML Time is dateFnsFp format time taint document body innerHTML Time is moment time format taint document body innerHTML Time is moment taint format document body innerHTML Time is dateformat time taint | +| autogenerated/Xss/DomBasedXss/dates.js:18:59:18:63 | taint | enclosingFunctionName | main | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:5:3:15 | 'click | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:5:3:15 | 'click | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:5:3:57 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:19:3:41 | encodeU ... nt(loc) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:19:3:41 | encodeU ... nt(loc) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:19:3:41 | encodeU ... nt(loc) | enclosingFunctionBody | loc window location href $ click | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:19:3:41 | encodeU ... nt(loc) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:38:3:40 | loc | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:38:3:40 | loc | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:38:3:40 | loc | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:38:3:40 | loc | calleeName | encodeURIComponent | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:38:3:40 | loc | enclosingFunctionBody | loc window location href $ click | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:38:3:40 | loc | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:45:3:57 | '">click' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:45:3:57 | '">click' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:45:3:57 | '">click' | enclosingFunctionBody | loc window location href $ click | +| autogenerated/Xss/DomBasedXss/encodeuri.js:3:45:3:57 | '">click' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:1:25:1:31 | 'my-id' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:1:25:1:31 | 'my-id' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:1:25:1:31 | 'my-id' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:1:25:1:31 | 'my-id' | calleeName | getElementById | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:1:25:1:31 | 'my-id' | receiverName | document | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:31:2:45 | '

    A link

    | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:31:2:45 | '

    A link

    | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:31:2:83 | '

    ' | enclosingFunctionName | onclick | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:49:2:61 | location.href | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:49:2:61 | location.href | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:49:2:61 | location.href | enclosingFunctionBody | parentNode innerHTML

    A link

    | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:49:2:61 | location.href | enclosingFunctionName | onclick | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:65:2:83 | '">A link' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:65:2:83 | '">A link' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:65:2:83 | '">A link' | enclosingFunctionBody | parentNode innerHTML

    A link

    | +| autogenerated/Xss/DomBasedXss/event-handler-receiver.js:2:65:2:83 | '">A link' | enclosingFunctionName | onclick | +| autogenerated/Xss/DomBasedXss/express.js:1:23:1:31 | 'express' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/express.js:1:23:1:31 | 'express' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/express.js:1:23:1:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/express.js:1:23:1:31 | 'express' | calleeName | require | +| autogenerated/Xss/DomBasedXss/express.js:5:9:5:20 | '/some/path' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/express.js:5:9:5:20 | '/some/path' | calleeAccessPath | express get | +| autogenerated/Xss/DomBasedXss/express.js:5:9:5:20 | '/some/path' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/express.js:5:9:5:20 | '/some/path' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/express.js:5:9:5:20 | '/some/path' | calleeName | get | +| autogenerated/Xss/DomBasedXss/express.js:5:9:5:20 | '/some/path' | receiverName | app | +| autogenerated/Xss/DomBasedXss/express.js:5:23:11:1 | functio ... " });\\n} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/express.js:5:23:11:1 | functio ... " });\\n} | calleeAccessPath | express get | +| autogenerated/Xss/DomBasedXss/express.js:5:23:11:1 | functio ... " });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/express.js:5:23:11:1 | functio ... " });\\n} | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/express.js:5:23:11:1 | functio ... " });\\n} | calleeName | get | +| autogenerated/Xss/DomBasedXss/express.js:5:23:11:1 | functio ... " });\\n} | receiverName | app | +| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | enclosingFunctionBody | req res JSDOM req param wobble runScripts dangerously JSDOM req param wobble runScripts outside-only | +| autogenerated/Xss/DomBasedXss/express.js:7:15:7:33 | req.param("wobble") | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | calleeAccessPath | express get req param | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | calleeName | param | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | enclosingFunctionBody | req res JSDOM req param wobble runScripts dangerously JSDOM req param wobble runScripts outside-only | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/express.js:7:25:7:32 | "wobble" | receiverName | req | +| autogenerated/Xss/DomBasedXss/express.js:7:36:7:64 | { runSc ... usly" } | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/express.js:7:36:7:64 | { runSc ... usly" } | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/express.js:7:36:7:64 | { runSc ... usly" } | enclosingFunctionBody | req res JSDOM req param wobble runScripts dangerously JSDOM req param wobble runScripts outside-only | +| autogenerated/Xss/DomBasedXss/express.js:7:36:7:64 | { runSc ... usly" } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | calleeAccessPath | express get req param | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | calleeName | param | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | enclosingFunctionBody | req res JSDOM req param wobble runScripts dangerously JSDOM req param wobble runScripts outside-only | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/express.js:10:25:10:32 | "wobble" | receiverName | req | +| autogenerated/Xss/DomBasedXss/jquery.js:4:5:4:11 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:4:5:4:11 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:4:5:4:11 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:4:5:4:11 | tainted | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:4:5:4:11 | tainted | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:4:5:4:11 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:5:5:5:10 | "body" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:5:5:5:10 | "body" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:5:5:5:10 | "body" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:5:5:5:10 | "body" | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:5:5:5:10 | "body" | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:5:5:5:10 | "body" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:5:13:5:19 | tainted | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/jquery.js:5:13:5:19 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:5:13:5:19 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:5:13:5:19 | tainted | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:5:13:5:19 | tainted | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:5:13:5:19 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:6:5:6:17 | "." + tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:6:5:6:17 | "." + tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:6:5:6:17 | "." + tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:6:5:6:17 | "." + tainted | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:6:5:6:17 | "." + tainted | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:6:5:6:17 | "." + tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:16 | "
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:16 | "
    " | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:34 | "
    " | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:34 | "
    " | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:34 | "
    " | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:34 | "
    " | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:7:5:7:34 | "
    " | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:7:20:7:26 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:7:20:7:26 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:7:20:7:26 | tainted | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:7:20:7:26 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:7:30:7:34 | "\\">" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:7:30:7:34 | "\\">" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:7:30:7:34 | "\\">" | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:7:30:7:34 | "\\">" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:8:5:8:10 | "body" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:8:5:8:10 | "body" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:8:5:8:10 | "body" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:8:5:8:10 | "body" | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:8:5:8:10 | "body" | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:8:5:8:10 | "body" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:8:18:8:34 | "XSS: " + tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:8:18:8:34 | "XSS: " + tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:8:18:8:34 | "XSS: " + tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:8:18:8:34 | "XSS: " + tainted | calleeName | html | +| autogenerated/Xss/DomBasedXss/jquery.js:8:18:8:34 | "XSS: " + tainted | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:8:18:8:34 | "XSS: " + tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:9:5:9:24 | window.location.hash | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:9:5:9:24 | window.location.hash | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:9:5:9:24 | window.location.hash | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:9:5:9:24 | window.location.hash | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:9:5:9:24 | window.location.hash | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:9:5:9:24 | window.location.hash | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:9 | "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:9 | "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:9 | "" | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:9 | "" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:40 | "" + ... "" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:40 | "" + ... "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:40 | "" + ... "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:40 | "" + ... "" | calleeName | $ | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:40 | "" + ... "" | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:10:5:10:40 | "" + ... "" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:10:13:10:31 | location.toString() | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:13:10:31 | location.toString() | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:13:10:31 | location.toString() | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:10:13:10:31 | location.toString() | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:10:35:10:40 | "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:35:10:40 | "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:10:35:10:40 | "" | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:10:35:10:40 | "" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | calleeName | getElementById | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:13:37:13:39 | 'x' | receiverName | document | +| autogenerated/Xss/DomBasedXss/jquery.js:14:19:14:58 | decodeU ... n.hash) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:14:19:14:58 | decodeU ... n.hash) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:14:19:14:58 | decodeU ... n.hash) | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:14:19:14:58 | decodeU ... n.hash) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:14:38:14:57 | window.location.hash | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:14:38:14:57 | window.location.hash | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:14:38:14:57 | window.location.hash | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:14:38:14:57 | window.location.hash | calleeName | decodeURIComponent | +| autogenerated/Xss/DomBasedXss/jquery.js:14:38:14:57 | window.location.hash | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:14:38:14:57 | window.location.hash | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:15:19:15:60 | decodeU ... search) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:15:19:15:60 | decodeU ... search) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:15:19:15:60 | decodeU ... search) | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:15:19:15:60 | decodeU ... search) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:15:38:15:59 | window. ... .search | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:15:38:15:59 | window. ... .search | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:15:38:15:59 | window. ... .search | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:15:38:15:59 | window. ... .search | calleeName | decodeURIComponent | +| autogenerated/Xss/DomBasedXss/jquery.js:15:38:15:59 | window. ... .search | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:15:38:15:59 | window. ... .search | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:16:19:16:64 | decodeU ... ring()) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:16:19:16:64 | decodeU ... ring()) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:16:19:16:64 | decodeU ... ring()) | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:16:19:16:64 | decodeU ... ring()) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jquery.js:16:38:16:63 | window. ... tring() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jquery.js:16:38:16:63 | window. ... tring() | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jquery.js:16:38:16:63 | window. ... tring() | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jquery.js:16:38:16:63 | window. ... tring() | calleeName | decodeURIComponent | +| autogenerated/Xss/DomBasedXss/jquery.js:16:38:16:63 | window. ... tring() | enclosingFunctionBody | tainted document location search $ tainted $ body tainted $ . tainted $
    $ body html XSS: tainted $ window location hash $ location toString elm document getElementById x elm innerHTML decodeURIComponent window location hash elm innerHTML decodeURIComponent window location search elm innerHTML decodeURIComponent window location toString | +| autogenerated/Xss/DomBasedXss/jquery.js:16:38:16:63 | window. ... tring() | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/jwt-server.js:1:23:1:31 | 'express' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:1:23:1:31 | 'express' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jwt-server.js:1:23:1:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jwt-server.js:1:23:1:31 | 'express' | calleeName | require | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:9:6:20 | '/some/path' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:9:6:20 | '/some/path' | calleeAccessPath | express get | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:9:6:20 | '/some/path' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:9:6:20 | '/some/path' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:9:6:20 | '/some/path' | calleeName | get | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:9:6:20 | '/some/path' | receiverName | app | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:23:13:1 | functio ... });\\n} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:23:13:1 | functio ... });\\n} | calleeAccessPath | express get | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:23:13:1 | functio ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:23:13:1 | functio ... });\\n} | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:23:13:1 | functio ... });\\n} | calleeName | get | +| autogenerated/Xss/DomBasedXss/jwt-server.js:6:23:13:1 | functio ... });\\n} | receiverName | app | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | calleeAccessPath | express get req param | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | calleeName | param | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | enclosingFunctionBody | req res taint req param wobble jwt verify taint my-secret-key err decoded JSDOM decoded foo runScripts dangerously | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt-server.js:7:27:7:34 | "wobble" | receiverName | req | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | calleeAccessPath | jsonwebtoken verify | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | calleeAccessPathWithStructuralInfo | jsonwebtoken member verify instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | calleeApiName | jsonwebtoken | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | calleeName | verify | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | enclosingFunctionBody | req res taint req param wobble jwt verify taint my-secret-key err decoded JSDOM decoded foo runScripts dangerously | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:16:9:20 | taint | receiverName | jwt | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | calleeAccessPath | jsonwebtoken verify | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | calleeAccessPathWithStructuralInfo | jsonwebtoken member verify instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | calleeApiName | jsonwebtoken | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | calleeName | verify | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | enclosingFunctionBody | req res taint req param wobble jwt verify taint my-secret-key err decoded JSDOM decoded foo runScripts dangerously | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:23:9:37 | 'my-secret-key' | receiverName | jwt | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | argumentIndex | 2 | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | calleeAccessPath | jsonwebtoken verify | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | calleeAccessPathWithStructuralInfo | jsonwebtoken member verify instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | calleeApiName | jsonwebtoken | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | calleeName | verify | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | enclosingFunctionBody | req res taint req param wobble jwt verify taint my-secret-key err decoded JSDOM decoded foo runScripts dangerously | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt-server.js:9:40:12:5 | functio ... ;\\n } | receiverName | jwt | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | enclosingFunctionBody | req res taint req param wobble jwt verify taint my-secret-key err decoded JSDOM decoded foo runScripts dangerously | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:19:11:29 | decoded.foo | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:32:11:60 | { runSc ... usly" } | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:32:11:60 | { runSc ... usly" } | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:32:11:60 | { runSc ... usly" } | enclosingFunctionBody | req res taint req param wobble jwt verify taint my-secret-key err decoded JSDOM decoded foo runScripts dangerously | +| autogenerated/Xss/DomBasedXss/jwt-server.js:11:32:11:60 | { runSc ... usly" } | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt.js:4:8:4:17 | loginUrl() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt.js:4:8:4:17 | loginUrl() | calleeAccessPath | jquery post | +| autogenerated/Xss/DomBasedXss/jwt.js:4:8:4:17 | loginUrl() | calleeAccessPathWithStructuralInfo | jquery member post instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt.js:4:8:4:17 | loginUrl() | calleeApiName | jquery | +| autogenerated/Xss/DomBasedXss/jwt.js:4:8:4:17 | loginUrl() | calleeName | post | +| autogenerated/Xss/DomBasedXss/jwt.js:4:8:4:17 | loginUrl() | receiverName | $ | +| autogenerated/Xss/DomBasedXss/jwt.js:4:20:4:32 | {data: "foo"} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/jwt.js:4:20:4:32 | {data: "foo"} | calleeAccessPath | jquery post | +| autogenerated/Xss/DomBasedXss/jwt.js:4:20:4:32 | {data: "foo"} | calleeAccessPathWithStructuralInfo | jquery member post instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt.js:4:20:4:32 | {data: "foo"} | calleeApiName | jquery | +| autogenerated/Xss/DomBasedXss/jwt.js:4:20:4:32 | {data: "foo"} | calleeName | post | +| autogenerated/Xss/DomBasedXss/jwt.js:4:20:4:32 | {data: "foo"} | receiverName | $ | +| autogenerated/Xss/DomBasedXss/jwt.js:4:27:4:31 | "foo" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/jwt.js:4:27:4:31 | "foo" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/jwt.js:4:35:7:1 | (data, ... ENCY]\\n} | argumentIndex | 2 | +| autogenerated/Xss/DomBasedXss/jwt.js:4:35:7:1 | (data, ... ENCY]\\n} | calleeAccessPath | jquery post | +| autogenerated/Xss/DomBasedXss/jwt.js:4:35:7:1 | (data, ... ENCY]\\n} | calleeAccessPathWithStructuralInfo | jquery member post instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt.js:4:35:7:1 | (data, ... ENCY]\\n} | calleeApiName | jquery | +| autogenerated/Xss/DomBasedXss/jwt.js:4:35:7:1 | (data, ... ENCY]\\n} | calleeName | post | +| autogenerated/Xss/DomBasedXss/jwt.js:4:35:7:1 | (data, ... ENCY]\\n} | receiverName | $ | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | calleeAccessPath | jwt-decode | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | calleeAccessPathWithStructuralInfo | jwt-decode instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | calleeApiName | jwt-decode | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | calleeName | jwt_decode | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | enclosingFunctionBody | data xhr decoded jwt_decode data $ jGrowl decoded | +| autogenerated/Xss/DomBasedXss/jwt.js:5:30:5:33 | data | enclosingFunctionName | $.post#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | calleeAccessPath | jquery jGrowl | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | calleeAccessPathWithStructuralInfo | jquery member jGrowl instanceorreturn | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | calleeApiName | jquery | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | calleeName | jGrowl | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | enclosingFunctionBody | data xhr decoded jwt_decode data $ jGrowl decoded | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | enclosingFunctionName | $.post#functionalargument | +| autogenerated/Xss/DomBasedXss/jwt.js:6:14:6:20 | decoded | receiverName | $ | +| autogenerated/Xss/DomBasedXss/nodemailer.js:1:26:1:37 | 'nodemailer' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:1:26:1:37 | 'nodemailer' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:1:26:1:37 | 'nodemailer' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:1:26:1:37 | 'nodemailer' | calleeName | require | +| autogenerated/Xss/DomBasedXss/nodemailer.js:2:23:2:31 | 'express' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:2:23:2:31 | 'express' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:2:23:2:31 | 'express' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:2:23:2:31 | 'express' | calleeName | require | +| autogenerated/Xss/DomBasedXss/nodemailer.js:4:23:4:33 | './backend' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:4:23:4:33 | './backend' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:4:23:4:33 | './backend' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:4:23:4:33 | './backend' | calleeName | require | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:10:6:27 | '/private_message' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:10:6:27 | '/private_message' | calleeAccessPath | express post | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:10:6:27 | '/private_message' | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:10:6:27 | '/private_message' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:10:6:27 | '/private_message' | calleeName | post | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:10:6:27 | '/private_message' | receiverName | app | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:30:15:1 | (req, r ... });\\n} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:30:15:1 | (req, r ... });\\n} | calleeAccessPath | express post | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:30:15:1 | (req, r ... });\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member post instanceorreturn | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:30:15:1 | (req, r ... });\\n} | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:30:15:1 | (req, r ... });\\n} | calleeName | post | +| autogenerated/Xss/DomBasedXss/nodemailer.js:6:30:15:1 | (req, r ... });\\n} | receiverName | app | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | calleeAccessPath | nodemailer createTransport | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | calleeAccessPathWithStructuralInfo | nodemailer member createTransport instanceorreturn | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | calleeApiName | nodemailer | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | calleeName | createTransport | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:7:46:7:47 | {} | receiverName | nodemailer | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | calleeAccessPath | nodemailer createTransport sendMail | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | calleeAccessPathWithStructuralInfo | nodemailer member createTransport instanceorreturn member sendMail instanceorreturn | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | calleeApiName | nodemailer | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | calleeName | sendMail | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:8:22:14:3 | {\\n f ... OK\\n } | receiverName | transport | +| autogenerated/Xss/DomBasedXss/nodemailer.js:9:11:9:33 | 'webmas ... le.com' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:9:11:9:33 | 'webmas ... le.com' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:9:11:9:33 | 'webmas ... le.com' | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:9:11:9:33 | 'webmas ... le.com' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:9:10:48 | backend ... ceiver) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:9:10:48 | backend ... ceiver) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:9:10:48 | backend ... ceiver) | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:9:10:48 | backend ... ceiver) | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | calleeName | getUserEmail | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:10:30:10:47 | req.query.receiver | receiverName | backend | +| autogenerated/Xss/DomBasedXss/nodemailer.js:11:14:11:30 | 'Private message' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:11:14:11:30 | 'Private message' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:11:14:11:30 | 'Private message' | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:11:14:11:30 | 'Private message' | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:12:11:12:69 | `Hi, yo ... sage}.` | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | enclosingFunctionBody | req res transport nodemailer createTransport transport sendMail from webmaster@example.com to backend getUserEmail req query receiver subject Private message text Hi, you got a message from someone. req query message . html Hi, you got a message from someone. req query message . | +| autogenerated/Xss/DomBasedXss/nodemailer.js:13:11:13:69 | `Hi, yo ... sage}.` | enclosingFunctionName | app.post#functionalargument | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:5:4:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:5:4:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:5:4:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:5:4:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:5:4:10 | 'myId' | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:5:4:10 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:18:4:63 | sanitiz ... target | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:18:4:63 | sanitiz ... target | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:18:4:63 | sanitiz ... target | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:18:4:63 | sanitiz ... target | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:18:4:63 | sanitiz ... target | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:4:18:4:63 | sanitiz ... target | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:5:6:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:5:6:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:5:6:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:5:6:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:5:6:10 | 'myId' | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:5:6:10 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:18:6:23 | target | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:18:6:23 | target | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:18:6:23 | target | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:18:6:23 | target | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:18:6:23 | target | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:6:18:6:23 | target | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:5:9:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:5:9:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:5:9:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:5:9:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:5:9:10 | 'myId' | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:5:9:10 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:18:9:24 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:18:9:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:18:9:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:18:9:24 | tainted | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:18:9:24 | tainted | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:9:18:9:24 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:5:13:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:5:13:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:5:13:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:5:13:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:5:13:10 | 'myId' | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:5:13:10 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:18:13:24 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:18:13:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:18:13:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:18:13:24 | tainted | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:18:13:24 | tainted | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:13:18:13:24 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:7:17:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:7:17:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:7:17:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:7:17:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:7:17:12 | 'myId' | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:7:17:12 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:20:17:20 | x | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:20:17:20 | x | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:20:17:20 | x | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:20:17:20 | x | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:20:17:20 | x | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:17:20:17:20 | x | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:7:21:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:7:21:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:7:21:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:7:21:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:7:21:12 | 'myId' | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:7:21:12 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:20:21:20 | x | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:20:21:20 | x | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:20:21:20 | x | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:20:21:20 | x | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:20:21:20 | x | enclosingFunctionBody | target document location search $ myId html sanitize DOMPurify sanitize target target $ myId html target tainted target $ myId html tainted sanitize tainted DOMPurify sanitize tainted $ myId html tainted inner target inner x $ myId html x sanitize x DOMPurify sanitize x $ myId html x | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:21:20:21:20 | x | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:5:32:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:5:32:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:5:32:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:5:32:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:5:32:10 | 'myId' | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:5:32:10 | 'myId' | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:18:32:25 | tainted2 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:18:32:25 | tainted2 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:18:32:25 | tainted2 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:18:32:25 | tainted2 | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:18:32:25 | tainted2 | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:32:18:32:25 | tainted2 | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:34:28:34:35 | tainted2 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:34:28:34:35 | tainted2 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:34:28:34:35 | tainted2 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:34:28:34:35 | tainted2 | calleeName | sanitizeBad | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:34:28:34:35 | tainted2 | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:34:28:34:35 | tainted2 | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:5:36:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:5:36:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:5:36:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:5:36:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:5:36:10 | 'myId' | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:5:36:10 | 'myId' | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:18:36:25 | tainted2 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:18:36:25 | tainted2 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:18:36:25 | tainted2 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:18:36:25 | tainted2 | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:18:36:25 | tainted2 | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:36:18:36:25 | tainted2 | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:5:39:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:5:39:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:5:39:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:5:39:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:5:39:10 | 'myId' | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:5:39:10 | 'myId' | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:18:39:25 | tainted3 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:18:39:25 | tainted3 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:18:39:25 | tainted3 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:18:39:25 | tainted3 | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:18:39:25 | tainted3 | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:39:18:39:25 | tainted3 | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:41:28:41:35 | tainted3 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:41:28:41:35 | tainted3 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:41:28:41:35 | tainted3 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:41:28:41:35 | tainted3 | calleeName | sanitizeBad | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:41:28:41:35 | tainted3 | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:41:28:41:35 | tainted3 | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:5:43:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:5:43:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:5:43:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:5:43:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:5:43:10 | 'myId' | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:5:43:10 | 'myId' | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:18:43:25 | tainted3 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:18:43:25 | tainted3 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:18:43:25 | tainted3 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:18:43:25 | tainted3 | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:18:43:25 | tainted3 | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:43:18:43:25 | tainted3 | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:5:45:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:5:45:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:5:45:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:5:45:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:5:45:10 | 'myId' | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:5:45:10 | 'myId' | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:18:45:56 | sanitiz ... target | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:18:45:56 | sanitiz ... target | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:18:45:56 | sanitiz ... target | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:18:45:56 | sanitiz ... target | calleeName | html | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:18:45:56 | sanitiz ... target | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:18:45:56 | sanitiz ... target | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:41:45:46 | target | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:41:45:46 | target | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:41:45:46 | target | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:41:45:46 | target | calleeName | sanitizeBad | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:41:45:46 | target | enclosingFunctionBody | target document location search sanitizeBad x x tainted2 target $ myId html tainted2 sanitize tainted2 sanitizeBad tainted2 $ myId html tainted2 tainted3 target $ myId html tainted3 sanitize tainted3 sanitizeBad tainted3 $ myId html tainted3 $ myId html sanitize sanitizeBad target target | +| autogenerated/Xss/DomBasedXss/optionalSanitizer.js:45:41:45:46 | target | enclosingFunctionName | badSanitizer | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:38:3:49 | {root: null} | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:38:3:49 | {root: null} | calleeAccessPath | react createContext | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:38:3:49 | {root: null} | calleeAccessPathWithStructuralInfo | react member createContext instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:38:3:49 | {root: null} | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:38:3:49 | {root: null} | calleeName | createContext | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:45:3:48 | null | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-create-context.js:3:45:3:48 | null | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-native.js:6:9:6:20 | '/some/path' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-native.js:6:9:6:20 | '/some/path' | calleeAccessPath | express get | +| autogenerated/Xss/DomBasedXss/react-native.js:6:9:6:20 | '/some/path' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-native.js:6:9:6:20 | '/some/path' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/react-native.js:6:9:6:20 | '/some/path' | calleeName | get | +| autogenerated/Xss/DomBasedXss/react-native.js:6:9:6:20 | '/some/path' | receiverName | app | +| autogenerated/Xss/DomBasedXss/react-native.js:6:23:10:1 | functio ... OT OK\\n} | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/react-native.js:6:23:10:1 | functio ... OT OK\\n} | calleeAccessPath | express get | +| autogenerated/Xss/DomBasedXss/react-native.js:6:23:10:1 | functio ... OT OK\\n} | calleeAccessPathWithStructuralInfo | express instanceorreturn member get instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-native.js:6:23:10:1 | functio ... OT OK\\n} | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/react-native.js:6:23:10:1 | functio ... OT OK\\n} | calleeName | get | +| autogenerated/Xss/DomBasedXss/react-native.js:6:23:10:1 | functio ... OT OK\\n} | receiverName | app | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | calleeAccessPath | express get req param | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member param instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | calleeName | param | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | enclosingFunctionBody | req res tainted req param code WebView html tainted WebView source html tainted | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/react-native.js:7:27:7:32 | "code" | receiverName | req | +| autogenerated/Xss/DomBasedXss/react-native.js:8:18:8:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-native.js:8:18:8:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-native.js:8:18:8:24 | tainted | enclosingFunctionBody | req res tainted req param code WebView html tainted WebView source html tainted | +| autogenerated/Xss/DomBasedXss/react-native.js:8:18:8:24 | tainted | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/react-native.js:9:27:9:33 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-native.js:9:27:9:33 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-native.js:9:27:9:33 | tainted | enclosingFunctionBody | req res tainted req param code WebView html tainted WebView source html tainted | +| autogenerated/Xss/DomBasedXss/react-native.js:9:27:9:33 | tainted | enclosingFunctionName | app.get#functionalargument | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | calleeAccessPath | react useContext | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | calleeAccessPathWithStructuralInfo | react member useContext instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | calleeName | useContext | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | enclosingFunctionBody | useContext MyContext | +| autogenerated/Xss/DomBasedXss/react-use-context.js:5:23:5:31 | MyContext | enclosingFunctionName | useMyContext | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | calleeAccessPath | react useContext root appendChild | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | calleeAccessPathWithStructuralInfo | react member useContext instanceorreturn member root member appendChild instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | calleeName | appendChild | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | enclosingFunctionBody | root useMyContext root appendChild window name | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | enclosingFunctionName | useDoc1 | +| autogenerated/Xss/DomBasedXss/react-use-context.js:10:22:10:32 | window.name | receiverName | root | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | calleeName | appendChild | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | enclosingFunctionBody | root context root appendChild window name | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | enclosingFunctionName | foo | +| autogenerated/Xss/DomBasedXss/react-use-context.js:16:26:16:36 | window.name | receiverName | root | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | calleeName | useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | enclosingFunctionBody | state setState useState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:4:38:4:48 | window.name | enclosingFunctionName | initialState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:42:5:56 | {__html: state} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:42:5:56 | {__html: state} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:42:5:56 | {__html: state} | enclosingFunctionBody | state setState useState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:42:5:56 | {__html: state} | enclosingFunctionName | initialState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:51:5:55 | state | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:51:5:55 | state | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:51:5:55 | state | enclosingFunctionBody | state setState useState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:5:51:5:55 | state | enclosingFunctionName | initialState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | calleeName | useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:9:38:9:42 | 'foo' | enclosingFunctionName | setStateValue | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn member instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | calleeName | setState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:10:14:10:24 | window.name | enclosingFunctionName | setStateValue | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:42:11:56 | {__html: state} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:42:11:56 | {__html: state} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:42:11:56 | {__html: state} | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:42:11:56 | {__html: state} | enclosingFunctionName | setStateValue | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:51:11:55 | state | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:51:11:55 | state | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:51:11:55 | state | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:11:51:11:55 | state | enclosingFunctionName | setStateValue | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | calleeName | useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:15:38:15:42 | 'foo' | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn member instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | calleeName | setState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:16:14:16:30 | () => window.name | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:42:17:56 | {__html: state} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:42:17:56 | {__html: state} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:42:17:56 | {__html: state} | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:42:17:56 | {__html: state} | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:51:17:55 | state | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:51:17:55 | state | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:51:17:55 | state | enclosingFunctionBody | state setState useState foo setState window name div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:17:51:17:55 | state | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | calleeName | useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | enclosingFunctionBody | state setState useState foo setState prev document body innerHTML prev setState window name | +| autogenerated/Xss/DomBasedXss/react-use-state.js:21:38:21:42 | 'foo' | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn member instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | calleeName | setState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | enclosingFunctionBody | state setState useState foo setState prev document body innerHTML prev setState window name | +| autogenerated/Xss/DomBasedXss/react-use-state.js:22:14:24:5 | prev => ... K\\n } | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:23:35:23:38 | prev | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:23:35:23:38 | prev | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:23:35:23:38 | prev | enclosingFunctionBody | state setState useState foo setState prev document body innerHTML prev setState window name | +| autogenerated/Xss/DomBasedXss/react-use-state.js:23:35:23:38 | prev | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn member instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | calleeName | setState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | enclosingFunctionBody | state setState useState foo setState prev document body innerHTML prev setState window name | +| autogenerated/Xss/DomBasedXss/react-use-state.js:25:14:25:30 | () => window.name | enclosingFunctionName | setStateValueLazy | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | calleeName | useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | enclosingFunctionBody | state setState useState foo setState safe setState also safe div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:29:38:29:42 | 'foo' | enclosingFunctionName | setStateValueSafe | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn member instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | calleeName | setState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | enclosingFunctionBody | state setState useState foo setState safe setState also safe div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:30:14:30:19 | 'safe' | enclosingFunctionName | setStateValueSafe | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | calleeAccessPath | react useState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | calleeAccessPathWithStructuralInfo | react member useState instanceorreturn member instanceorreturn | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | calleeApiName | react | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | calleeName | setState | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | enclosingFunctionBody | state setState useState foo setState safe setState also safe div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:31:14:31:30 | () => 'also safe' | enclosingFunctionName | setStateValueSafe | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:42:32:56 | {__html: state} | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:42:32:56 | {__html: state} | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:42:32:56 | {__html: state} | enclosingFunctionBody | state setState useState foo setState safe setState also safe div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:42:32:56 | {__html: state} | enclosingFunctionName | setStateValueSafe | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:51:32:55 | state | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:51:32:55 | state | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:51:32:55 | state | enclosingFunctionBody | state setState useState foo setState safe setState also safe div dangerouslySetInnerHTML __html state | +| autogenerated/Xss/DomBasedXss/react-use-state.js:32:51:32:55 | state | enclosingFunctionName | setStateValueSafe | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | calleeAccessPath | express get req query data toString replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member data member toString instanceorreturn member replace instanceorreturn | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | enclosingFunctionBody | s amp /&/g lt //g s toString replace amp & replace lt < replace gt > | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:18:4:20 | amp | enclosingFunctionName | escapeHtml | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | calleeAccessPath | express get req query data toString replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member data member toString instanceorreturn member replace instanceorreturn | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | enclosingFunctionBody | s amp /&/g lt //g s toString replace amp & replace lt < replace gt > | +| autogenerated/Xss/DomBasedXss/sanitiser.js:4:23:4:29 | '&' | enclosingFunctionName | escapeHtml | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | calleeAccessPath | express get req query data toString replace replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member data member toString instanceorreturn member replace instanceorreturn member replace instanceorreturn | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | enclosingFunctionBody | s amp /&/g lt //g s toString replace amp & replace lt < replace gt > | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:18:5:19 | lt | enclosingFunctionName | escapeHtml | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | calleeAccessPath | express get req query data toString replace replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member data member toString instanceorreturn member replace instanceorreturn member replace instanceorreturn | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | enclosingFunctionBody | s amp /&/g lt //g s toString replace amp & replace lt < replace gt > | +| autogenerated/Xss/DomBasedXss/sanitiser.js:5:22:5:27 | '<' | enclosingFunctionName | escapeHtml | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | calleeAccessPath | express get req query data toString replace replace replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member data member toString instanceorreturn member replace instanceorreturn member replace instanceorreturn member replace instanceorreturn | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | enclosingFunctionBody | s amp /&/g lt //g s toString replace amp & replace lt < replace gt > | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:18:6:19 | gt | enclosingFunctionName | escapeHtml | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | calleeAccessPath | express get req query data toString replace replace replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | calleeAccessPathWithStructuralInfo | express instanceorreturn member get functionalarg param req member query member data member toString instanceorreturn member replace instanceorreturn member replace instanceorreturn member replace instanceorreturn | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | calleeApiName | express | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | enclosingFunctionBody | s amp /&/g lt //g s toString replace amp & replace lt < replace gt > | +| autogenerated/Xss/DomBasedXss/sanitiser.js:6:22:6:27 | '>' | enclosingFunctionName | escapeHtml | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:19:11:22 | /'/g | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:19:11:22 | /'/g | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:19:11:22 | /'/g | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:19:11:22 | /'/g | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:19:11:22 | /'/g | enclosingFunctionBody | s s toString replace /'/g %22 replace /"/g %27 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:19:11:22 | /'/g | enclosingFunctionName | escapeAttr | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:25:11:29 | '%22' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:25:11:29 | '%22' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:25:11:29 | '%22' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:25:11:29 | '%22' | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:25:11:29 | '%22' | enclosingFunctionBody | s s toString replace /'/g %22 replace /"/g %27 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:11:25:11:29 | '%22' | enclosingFunctionName | escapeAttr | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:19:12:22 | /"/g | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:19:12:22 | /"/g | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:19:12:22 | /"/g | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:19:12:22 | /"/g | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:19:12:22 | /"/g | enclosingFunctionBody | s s toString replace /'/g %22 replace /"/g %27 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:19:12:22 | /"/g | enclosingFunctionName | escapeAttr | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:25:12:29 | '%27' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:25:12:29 | '%27' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:25:12:29 | '%27' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:25:12:29 | '%27' | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:25:12:29 | '%27' | enclosingFunctionBody | s s toString replace /'/g %22 replace /"/g %27 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:12:25:12:29 | '%27' | enclosingFunctionName | escapeAttr | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:19:18:30 | " escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:19:18:30 | "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:19:18:91 | "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:19:18:91 | "" | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:19:18:91 | "" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:34:18:52 | escapeAttr(tainted) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:34:18:52 | escapeAttr(tainted) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:34:18:52 | escapeAttr(tainted) | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:34:18:52 | escapeAttr(tainted) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:56:18:60 | "\\">" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:56:18:60 | "\\">" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:56:18:60 | "\\">" | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:56:18:60 | "\\">" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:64:18:82 | escapeHtml(tainted) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:64:18:82 | escapeHtml(tainted) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:64:18:82 | escapeHtml(tainted) | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:64:18:82 | escapeHtml(tainted) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:86:18:91 | "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:86:18:91 | "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:86:18:91 | "" | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:18:86:18:91 | "" | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:25 | "
    " | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:25 | "
    " | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:25 | "
    " | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:25 | "
    " | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:58 | "
    " ...
    " | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:58 | "
    " ...
    " | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:58 | "
    " ...
    " | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:19:19:58 | "
    " ...
    " | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:29:19:47 | escapeAttr(tainted) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:29:19:47 | escapeAttr(tainted) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:29:19:47 | escapeAttr(tainted) | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:29:19:47 | escapeAttr(tainted) | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:51:19:58 | "
    " | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:51:19:58 | "
    " | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:51:19:58 | "
    " | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:19:51:19:58 | "
    " | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | calleeName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:22:18:22:24 | tainted | receiverName | regex | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:21:23:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:29:23:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:29:23:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:29:23:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:29:23:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:39:23:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:39:23:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:39:23:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:23:39:23:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:21:25:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:29:25:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:29:25:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:29:25:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:29:25:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:39:25:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:39:25:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:39:25:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:25:39:25:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | calleeName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:27:19:27:25 | tainted | receiverName | regex | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:21:28:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:29:28:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:29:28:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:29:28:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:29:28:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:39:28:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:39:28:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:39:28:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:28:39:28:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:21:30:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:29:30:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:29:30:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:29:30:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:29:30:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:39:30:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:39:30:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:39:30:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:30:39:30:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | calleeName | exec | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:32:18:32:24 | tainted | receiverName | regex | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:21:33:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:29:33:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:29:33:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:29:33:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:29:33:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:39:33:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:39:33:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:39:33:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:33:39:33:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:21:35:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:29:35:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:29:35:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:29:35:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:29:35:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:39:35:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:39:35:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:39:35:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:35:39:35:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | calleeName | exec | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:37:18:37:24 | tainted | receiverName | regex | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:21:38:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:29:38:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:29:38:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:29:38:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:29:38:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:39:38:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:39:38:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:39:38:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:38:39:38:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:21:40:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:29:40:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:29:40:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:29:40:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:29:40:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:39:40:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:39:40:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:39:40:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:40:39:40:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | calleeName | exec | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:42:18:42:24 | tainted | receiverName | regex | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:21:43:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:29:43:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:29:43:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:29:43:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:29:43:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:39:43:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:39:43:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:39:43:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:43:39:43:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:25 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:25 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:25 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:25 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:44 | '' + ... '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:44 | '' + ... '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:44 | '' + ... '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:21:45:44 | '' + ... '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:29:45:35 | tainted | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:29:45:35 | tainted | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:29:45:35 | tainted | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:29:45:35 | tainted | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:39:45:44 | '
    ' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:39:45:44 | '
    ' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:39:45:44 | '
    ' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:45:39:45:44 | '
    ' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:19:48:46 | tainted ... /g, '') | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:19:48:46 | tainted ... /g, '') | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:19:48:46 | tainted ... /g, '') | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:19:48:46 | tainted ... /g, '') | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:35:48:41 | /<\\w+/g | receiverName | tainted | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | calleeName | replace | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | enclosingFunctionBody | tainted window name elt document createElement elt innerHTML escapeHtml tainted elt innerHTML
    escapeAttr tainted
    regex /[<>'"&]/ regex test tainted elt innerHTML tainted elt innerHTML tainted regex test tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted regex exec tainted null elt innerHTML tainted elt innerHTML tainted elt innerHTML tainted replace /<\\w+/g | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/sanitiser.js:48:44:48:45 | '' | receiverName | tainted | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | calleeName | setItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:28:2:36 | 'session' | receiverName | sessionStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | calleeName | setItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:2:39:2:62 | documen ... .search | receiverName | sessionStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | calleeName | setItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:26:3:32 | 'local' | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | calleeName | setItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:3:35:3:58 | documen ... .search | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:7:5:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:7:5:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:7:5:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:7:5:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:7:5:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:7:5:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:20:5:52 | session ... ssion') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:20:5:52 | session ... ssion') | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:20:5:52 | session ... ssion') | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:20:5:52 | session ... ssion') | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:20:5:52 | session ... ssion') | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:20:5:52 | session ... ssion') | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:5:43:5:51 | 'session' | receiverName | sessionStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:7:6:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:7:6:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:7:6:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:7:6:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:7:6:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:7:6:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:20:6:50 | localSt ... ssion') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:20:6:50 | localSt ... ssion') | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:20:6:50 | localSt ... ssion') | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:20:6:50 | localSt ... ssion') | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:20:6:50 | localSt ... ssion') | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:20:6:50 | localSt ... ssion') | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:6:41:6:49 | 'session' | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:7:7:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:7:7:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:7:7:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:7:7:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:7:7:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:7:7:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:20:7:50 | session ... local') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:20:7:50 | session ... local') | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:20:7:50 | session ... local') | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:20:7:50 | session ... local') | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:20:7:50 | session ... local') | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:20:7:50 | session ... local') | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:7:43:7:49 | 'local' | receiverName | sessionStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:7:8:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:7:8:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:7:8:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:7:8:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:7:8:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:7:8:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:20:8:48 | localSt ... local') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:20:8:48 | localSt ... local') | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:20:8:48 | localSt ... local') | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:20:8:48 | localSt ... local') | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:20:8:48 | localSt ... local') | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:20:8:48 | localSt ... local') | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:8:41:8:47 | 'local' | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:10:37:10:43 | 'local' | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:7:12:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:7:12:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:7:12:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:7:12:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:7:12:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:7:12:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:31 | " something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:31 | "" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:54 | "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:54 | "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:54 | "" | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:54 | "" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:20:12:54 | "" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:35:12:38 | href | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:35:12:38 | href | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:35:12:38 | href | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:35:12:38 | href | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:42:12:54 | ">foobar" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:42:12:54 | ">foobar" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:42:12:54 | ">foobar" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:12:42:12:54 | ">foobar" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | calleeName | indexOf | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:14:22:14:25 | "\\"" | receiverName | href | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:7:17:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:7:17:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:7:17:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:7:17:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:7:17:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:7:17:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:31 | " something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:31 | "" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:45 | "" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:45 | "" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:45 | "" | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:45 | "" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:20:17:45 | "" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:35:17:38 | href | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:35:17:38 | href | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:35:17:38 | href | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:35:17:38 | href | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:42:17:45 | "/>" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:42:17:45 | "/>" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:42:17:45 | "/>" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:17:42:17:45 | "/>" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:19:38:19:44 | 'local' | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | calleeName | indexOf | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:20:23:20:26 | "\\"" | receiverName | href2 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:7:23:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:7:23:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:7:23:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:7:23:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:7:23:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:7:23:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:33 | "\\n something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:33 | "\\n" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:57 | "\\n" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:57 | "\\n" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:57 | "\\n" | calleeName | html | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:57 | "\\n" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:20:23:57 | "\\n" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:37:23:41 | href2 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:37:23:41 | href2 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:37:23:41 | href2 | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:37:23:41 | href2 | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:45:23:57 | ">foobar" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:45:23:57 | ">foobar" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:45:23:57 | ">foobar" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:23:45:23:57 | ">foobar" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | calleeName | getItem | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:25:38:25:44 | 'local' | receiverName | localStorage | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | calleeName | indexOf | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:26:23:26:26 | "\\"" | receiverName | href3 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:7:29:12 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:7:29:12 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:7:29:12 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:7:29:12 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:7:29:12 | 'myId' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:7:29:12 | 'myId' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:20:29:35 | '\\r\\nfoobar href indexOf " 1 $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:20:29:35 | '\\r\\nfoobar href indexOf " 1 $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:20:29:73 | '\\r\\n' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:39:29:43 | href3 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:39:29:43 | href3 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:39:29:43 | href3 | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:39:29:43 | href3 | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:47:29:50 | '">' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:47:29:50 | '">' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:47:29:50 | '">' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:47:29:50 | '">' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:54:29:64 | "something" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:54:29:64 | "something" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:54:29:64 | "something" | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:54:29:64 | "something" | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:68:29:73 | '' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:68:29:73 | '' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:68:29:73 | '' | enclosingFunctionBody | sessionStorage setItem session document location search localStorage setItem local document location search $ myId html sessionStorage getItem session $ myId html localStorage getItem session $ myId html sessionStorage getItem local $ myId html localStorage getItem local href localStorage getItem local $ myId html something | +| autogenerated/Xss/DomBasedXss/stored-xss.js:29:68:29:73 | '' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:16:1:51 | documen ... deAt(0) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:16:1:51 | documen ... deAt(0) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:16:1:51 | documen ... deAt(0) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:16:1:51 | documen ... deAt(0) | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:16:1:51 | documen ... deAt(0) | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:50:1:50 | 0 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:50:1:50 | 0 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:50:1:50 | 0 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:1:50:1:50 | 0 | calleeName | charCodeAt | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:3:16:3:32 | document.location | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:3:16:3:32 | document.location | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:3:16:3:32 | document.location | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:3:16:3:32 | document.location | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:3:16:3:32 | document.location | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:4:16:4:37 | documen ... on.href | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:4:16:4:37 | documen ... on.href | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:4:16:4:37 | documen ... on.href | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:4:16:4:37 | documen ... on.href | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:4:16:4:37 | documen ... on.href | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:5:16:5:47 | documen ... lueOf() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:5:16:5:47 | documen ... lueOf() | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:5:16:5:47 | documen ... lueOf() | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:5:16:5:47 | documen ... lueOf() | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:5:16:5:47 | documen ... lueOf() | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:6:16:6:43 | documen ... f.sup() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:6:16:6:43 | documen ... f.sup() | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:6:16:6:43 | documen ... f.sup() | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:6:16:6:43 | documen ... f.sup() | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:6:16:6:43 | documen ... f.sup() | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:7:16:7:51 | documen ... rCase() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:7:16:7:51 | documen ... rCase() | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:7:16:7:51 | documen ... rCase() | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:7:16:7:51 | documen ... rCase() | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:7:16:7:51 | documen ... rCase() | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:8:16:8:48 | documen ... mLeft() | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:8:16:8:48 | documen ... mLeft() | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:8:16:8:48 | documen ... mLeft() | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:8:16:8:48 | documen ... mLeft() | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:8:16:8:48 | documen ... mLeft() | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:16:9:58 | String. ... n.href) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:16:9:58 | String. ... n.href) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:16:9:58 | String. ... n.href) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:16:9:58 | String. ... n.href) | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:16:9:58 | String. ... n.href) | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:36:9:57 | documen ... on.href | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:36:9:57 | documen ... on.href | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:36:9:57 | documen ... on.href | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:36:9:57 | documen ... on.href | calleeName | fromCharCode | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:9:36:9:57 | documen ... on.href | receiverName | String | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:16:10:45 | String( ... n.href) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:16:10:45 | String( ... n.href) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:16:10:45 | String( ... n.href) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:16:10:45 | String( ... n.href) | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:16:10:45 | String( ... n.href) | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:23:10:44 | documen ... on.href | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:23:10:44 | documen ... on.href | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:23:10:44 | documen ... on.href | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:10:23:10:44 | documen ... on.href | calleeName | String | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:11:16:11:45 | escape( ... n.href) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:11:16:11:45 | escape( ... n.href) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:11:16:11:45 | escape( ... n.href) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:11:16:11:45 | escape( ... n.href) | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:11:16:11:45 | escape( ... n.href) | receiverName | document | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:12:16:12:61 | escape( ... href))) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:12:16:12:61 | escape( ... href))) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:12:16:12:61 | escape( ... href))) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:12:16:12:61 | escape( ... href))) | calleeName | write | +| autogenerated/Xss/DomBasedXss/string-manipulations.js:12:16:12:61 | escape( ... href))) | receiverName | document | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | calleeName | substring | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:7:59:7:59 | 1 | receiverName | target | +| autogenerated/Xss/DomBasedXss/translate.js:9:5:9:19 | 'original-term' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:9:5:9:19 | 'original-term' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:9:5:9:19 | 'original-term' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:9:5:9:19 | 'original-term' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/translate.js:9:5:9:19 | 'original-term' | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:9:5:9:19 | 'original-term' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:9:27:9:50 | searchP ... 'term') | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:9:27:9:50 | searchP ... 'term') | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:9:27:9:50 | searchP ... 'term') | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:9:27:9:50 | searchP ... 'term') | calleeName | html | +| autogenerated/Xss/DomBasedXss/translate.js:9:27:9:50 | searchP ... 'term') | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:9:27:9:50 | searchP ... 'term') | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | calleeName | get | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:9:44:9:49 | 'term' | receiverName | searchParams | +| autogenerated/Xss/DomBasedXss/translate.js:11:5:11:21 | 'translated-term' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:11:5:11:21 | 'translated-term' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:11:5:11:21 | 'translated-term' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:11:5:11:21 | 'translated-term' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/translate.js:11:5:11:21 | 'translated-term' | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:11:5:11:21 | 'translated-term' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:11:29:11:63 | transla ... term')] | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:11:29:11:63 | transla ... term')] | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:11:29:11:63 | transla ... term')] | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:11:29:11:63 | transla ... term')] | calleeName | html | +| autogenerated/Xss/DomBasedXss/translate.js:11:29:11:63 | transla ... term')] | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:11:29:11:63 | transla ... term')] | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | calleeName | get | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | enclosingFunctionBody | translate own goal backpass fumble feint target document location search searchParams URLSearchParams target substring 1 $ original-term html searchParams get term $ translated-term html translate searchParams get term | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | enclosingFunctionName | | +| autogenerated/Xss/DomBasedXss/translate.js:11:56:11:61 | 'term' | receiverName | searchParams | +| autogenerated/Xss/DomBasedXss/tst3.js:1:35:1:39 | "foo" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:1:35:1:39 | "foo" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:1:35:1:39 | "foo" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:1:35:1:39 | "foo" | calleeName | getElementById | +| autogenerated/Xss/DomBasedXss/tst3.js:1:35:1:39 | "foo" | receiverName | document | +| autogenerated/Xss/DomBasedXss/tst3.js:2:23:2:74 | decodeU ... str(1)) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:2:23:2:74 | decodeU ... str(1)) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:2:23:2:74 | decodeU ... str(1)) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:2:23:2:74 | decodeU ... str(1)) | calleeName | parse | +| autogenerated/Xss/DomBasedXss/tst3.js:2:23:2:74 | decodeU ... str(1)) | receiverName | JSON | +| autogenerated/Xss/DomBasedXss/tst3.js:2:42:2:73 | window. ... bstr(1) | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:2:42:2:73 | window. ... bstr(1) | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:2:42:2:73 | window. ... bstr(1) | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:2:42:2:73 | window. ... bstr(1) | calleeName | decodeURIComponent | +| autogenerated/Xss/DomBasedXss/tst3.js:2:72:2:72 | 1 | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:2:72:2:72 | 1 | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:2:72:2:72 | 1 | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:2:72:2:72 | 1 | calleeName | substr | +| autogenerated/Xss/DomBasedXss/tst3.js:4:18:4:22 | "src" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:4:18:4:22 | "src" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:4:18:4:22 | "src" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:4:18:4:22 | "src" | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:4:18:4:22 | "src" | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:4:25:4:32 | data.src | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:4:25:4:32 | data.src | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:4:25:4:32 | data.src | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:4:25:4:32 | data.src | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:4:25:4:32 | data.src | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:5:18:5:23 | "HREF" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:5:18:5:23 | "HREF" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:5:18:5:23 | "HREF" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:5:18:5:23 | "HREF" | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:5:18:5:23 | "HREF" | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:5:26:5:31 | data.p | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:5:26:5:31 | data.p | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:5:26:5:31 | data.p | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:5:26:5:31 | data.p | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:5:26:5:31 | data.p | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:6:18:6:24 | "width" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:6:18:6:24 | "width" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:6:18:6:24 | "width" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:6:18:6:24 | "width" | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:6:18:6:24 | "width" | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:6:27:6:32 | data.w | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:7:18:7:29 | "xlink:href" | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:7:18:7:29 | "xlink:href" | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:7:18:7:29 | "xlink:href" | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:7:18:7:29 | "xlink:href" | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:7:18:7:29 | "xlink:href" | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:7:32:7:37 | data.p | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:7:32:7:37 | data.p | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:7:32:7:37 | data.p | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:7:32:7:37 | data.p | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:7:32:7:37 | data.p | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:9:20:9:26 | 'xlink' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:9:20:9:26 | 'xlink' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:9:20:9:26 | 'xlink' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:9:20:9:26 | 'xlink' | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:9:20:9:26 | 'xlink' | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:9:29:9:34 | 'href' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:9:29:9:34 | 'href' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:9:29:9:34 | 'href' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:9:29:9:34 | 'href' | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:9:29:9:34 | 'href' | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:9:37:9:42 | data.p | argumentIndex | 2 | +| autogenerated/Xss/DomBasedXss/tst3.js:9:37:9:42 | data.p | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:9:37:9:42 | data.p | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:9:37:9:42 | data.p | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:9:37:9:42 | data.p | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:10:20:10:27 | 'foobar' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:10:20:10:27 | 'foobar' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:10:20:10:27 | 'foobar' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:10:20:10:27 | 'foobar' | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:10:20:10:27 | 'foobar' | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:10:30:10:35 | 'href' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:10:30:10:35 | 'href' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:10:30:10:35 | 'href' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:10:30:10:35 | 'href' | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:10:30:10:35 | 'href' | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:10:38:10:43 | data.p | argumentIndex | 2 | +| autogenerated/Xss/DomBasedXss/tst3.js:10:38:10:43 | data.p | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:10:38:10:43 | data.p | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:10:38:10:43 | data.p | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:10:38:10:43 | data.p | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:11:20:11:24 | 'baz' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:11:20:11:24 | 'baz' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:11:20:11:24 | 'baz' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:11:20:11:24 | 'baz' | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:11:20:11:24 | 'baz' | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:11:27:11:33 | 'width' | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:11:27:11:33 | 'width' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:11:27:11:33 | 'width' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:11:27:11:33 | 'width' | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:11:27:11:33 | 'width' | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w | argumentIndex | 2 | +| autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w | calleeName | setAttributeNS | +| autogenerated/Xss/DomBasedXss/tst3.js:11:36:11:41 | data.w | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:15:20:15:20 | p | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst3.js:15:20:15:20 | p | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:15:20:15:20 | p | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:15:20:15:20 | p | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:15:20:15:20 | p | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] | argumentIndex | 1 | +| autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] | calleeName | setAttribute | +| autogenerated/Xss/DomBasedXss/tst3.js:15:23:15:29 | data[p] | receiverName | foo | +| autogenerated/Xss/DomBasedXss/tst.js:5:5:5:10 | 'myId' | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst.js:5:5:5:10 | 'myId' | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst.js:5:5:5:10 | 'myId' | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst.js:5:5:5:10 | 'myId' | calleeName | $ | +| autogenerated/Xss/DomBasedXss/tst.js:5:5:5:10 | 'myId' | enclosingFunctionBody | target document location search $ myId html target document write document write $
    $
    $
    params URL document location searchParams $ name html params get name searchParams URLSearchParams target substring 1 $ name html searchParams get name | +| autogenerated/Xss/DomBasedXss/tst.js:5:5:5:10 | 'myId' | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/tst.js:5:18:5:23 | target | argumentIndex | 0 | +| autogenerated/Xss/DomBasedXss/tst.js:5:18:5:23 | target | calleeAccessPath | | +| autogenerated/Xss/DomBasedXss/tst.js:5:18:5:23 | target | calleeAccessPathWithStructuralInfo | | +| autogenerated/Xss/DomBasedXss/tst.js:5:18:5:23 | target | calleeName | html | +| autogenerated/Xss/DomBasedXss/tst.js:5:18:5:23 | target | enclosingFunctionBody | target document location search $ myId html target document write document write $
    $
    $
    params URL document location searchParams $ name html params get name searchParams URLSearchParams target substring 1 $ name html searchParams get name | +| autogenerated/Xss/DomBasedXss/tst.js:5:18:5:23 | target | enclosingFunctionName | test | +| autogenerated/Xss/DomBasedXss/tst.js:8:18:8:35 | " document write $
    $
    $
    params URL document location searchParams $ name html params get name searchParams URLSearchParams target substring 1 $ name html searchParams get name | +| autogenerated/Xss/DomBasedXss/tst.js:8:18:8:35 | "