coretrace-python-analyzer 0.24.0__tar.gz → 0.25.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/CHANGELOG.md +42 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/PKG-INFO +1 -1
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/docs/usage.md +15 -7
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/pyproject.toml +1 -1
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/__init__.py +1 -1
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/source/__init__.py +8 -1
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/source/manager.py +21 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/source/positions.py +3 -20
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/templates.py +264 -104
- coretrace_python_analyzer-0.25.0/tests/test_line_index.py +23 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_release.py +1 -1
- coretrace_python_analyzer-0.25.0/tests/test_template_block_placement.py +237 -0
- coretrace_python_analyzer-0.25.0/tests/test_template_filter_cycles.py +275 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_filter_walk.py +189 -39
- coretrace_python_analyzer-0.25.0/tests/test_template_positions.py +68 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/.github/workflows/ci.yml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/.github/workflows/release.yml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/.gitignore +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/AUTHORS.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/CODE_OF_CONDUCT.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/CONTRIBUTING.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/LICENSE +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/NOTICE +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/README.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/SECURITY.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/docs/architecture.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/docs/plugins.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/examples/add.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/examples/canonical_symbols.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/analysis.stderr +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/findings.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/rapport.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/sbom.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/triage.csv +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/verification.txt +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/reports/mitmproxy-2026-10-02/vex.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/__main__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/constants.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/heap.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/module_constants.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/ranges.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/strings.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/abstract/values.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/analysis/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/analysis/manager.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/analysis/provider.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/dependency_policy/dependency_policy.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/dependency_policy/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/reachable_vulnerability/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/reachable_vulnerability/reachable_vulnerability.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/sample_advisories/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/sample_advisories/sample_advisories.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/vulnerable_dependency/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/dependency/vulnerable_dependency/vulnerable_dependency.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/aiohttp/aiohttp_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/aiohttp/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/bottle/bottle_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/bottle/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/cli/cli_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/cli/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/credentials/credential_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/credentials/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/db_drivers/db_driver_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/db_drivers/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/django/django_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/django/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/fastapi/fastapi_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/fastapi/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/flask/flask_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/flask/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/http_clients/http_client_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/http_clients/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/python_stdlib/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/python_stdlib/python_stdlib.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/sqlalchemy/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/sqlalchemy/sqlalchemy_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/tornado/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/models/tornado/tornado_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/secrets/config_secrets/config_secrets.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/secrets/config_secrets/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/secrets/hardcoded_secrets/hardcoded_secrets.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/secrets/hardcoded_secrets/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/code_injection/code_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/code_injection/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/command_injection/command_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/command_injection/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/insecure_deserialization/insecure_deserialization.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/insecure_deserialization/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/nosql_injection/nosql_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/nosql_injection/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/open_redirect/open_redirect.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/open_redirect/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/path_traversal/path_traversal.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/path_traversal/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/plaintext_credentials/plaintext_credentials.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/plaintext_credentials/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/sql_injection/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/sql_injection/sql_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/ssrf/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/ssrf/ssrf.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/xss/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/security/xss/xss.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/dangerous_eval/dangerous_eval.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/dangerous_eval/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/flask_debug/flask_debug.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/flask_debug/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/insecure_tempfile/insecure_tempfile.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/insecure_tempfile/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/insecure_tls/insecure_tls.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/insecure_tls/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/missing_timeout/missing_timeout.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/missing_timeout/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/unsafe_archive/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/unsafe_archive/unsafe_archive.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/unsafe_xml/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/unsafe_xml/unsafe_xml.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/weak_crypto/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/weak_crypto/weak_crypto.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/weak_random/plugin.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/bundled/syntax/weak_random/weak_random.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/cache.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/cfg/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/cfg/builder.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/cfg/dominance.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/cfg/model.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/cli.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dataflow/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dataflow/lattice.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dataflow/solver.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/advisories.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/correlation.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/graph.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/policy.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/sbom.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/dependency/vex.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/engine.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/baseline.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/context.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/coverage.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/model.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/provenance.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/refutation.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/rules.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/findings/suppressions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/frontend/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/frontend/ast_adapter.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/frontend/parser.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/hir/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/hir/nodes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/hir/visitors.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/interprocedural/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/interprocedural/callgraph.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/interprocedural/modulegraph.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/interprocedural/summaries.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/ir/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/ir/defuse.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/ir/lowering.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/ir/model.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/ir/printer.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/ir/ssa.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/api.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/detectors.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/loader.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/manifest.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/registry.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/plugins/secrets.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/reporters/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/reporters/json_format.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/reporters/report.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/reporters/sarif.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/reporters/text.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/semantic/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/semantic/identity.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/semantic/imports.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/semantic/scopes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/semantic/symbols.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/source/model.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/__init__.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/commands.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/engine.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/routes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/src/coretrace_python/taint/urls.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/Chatbot.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/DjangoGoat.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/Flask-Image-Editing-Website.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/InsecureGram.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/MiniBookApiServer.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/NPL-IA.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/Spam-Detection-Project.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/Vulnerable_fastapi.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/dvpwa.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/full-stack-fastapi-template.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/healthchecks.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/httpie.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/luigi.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/my_gdb.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/network-topologer.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/pygoat.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/uploadbox-cloud-storage-solution.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/vulnerable-flask.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/expected/yt-fts.json +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/fixtures/vulnerable-flask/README.md +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/fixtures/vulnerable-flask/app.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/fixtures/vulnerable-flask/requirements.txt +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/fixtures/vulnerable-flask/vulnerable_services.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/regression/repositories.toml +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_advisory_evidence.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_advisory_feeds.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_advisory_url_host.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_aiohttp_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_allowlist_shapes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_analysis_manager.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_annotation_bindings.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_annotation_expression_scopes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_architecture.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_argument_conditions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_argument_present_conditions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_attacker_arguments.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_attribute_call_loops.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_attribute_call_review.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_attribute_call_sinks.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_audit_detectors.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_base_patterns.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_baseline.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_baseline_digests.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_baseline_key.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_baseline_schema_1.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_block_super.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_cache.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_cache_engine_version.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_cfg.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_class_keywords_with_targets.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_cli.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_closures.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_code_context.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_code_context_single_file.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_code_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_command_arguments.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_command_decided_cases.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_command_injection_nature.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_config_secrets_coverage.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_config_value_spans.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_constants.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_correlation.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_credential_context.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_credential_project_path.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_dataflow.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_declared_entry_points.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_deep_nesting.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_dependencies.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_detectors.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_discovery.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_django_http_clients.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_django_routes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_django_safe_values.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_docs.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_dominance.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_dynamic_import_sinks.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_dynamic_import_verdicts.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_emit_ir.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_entry_point_aliases.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_entry_point_suffixes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_exceptions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_factories_match_loop_else.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_fail_on.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_fastapi_cli_precision.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_file_locations.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_folded_secret_literals.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_frameworks.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_frontend_gaps.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_function_aliases_api.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_heap.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_hex_digests.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_hir_builder.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_import_path_sinks.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_imports.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_interprocedural.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_interprocedural_taint.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_ir.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_jobs_option.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_jobs_workers.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_key_taint.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_keyword_name_conditions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_line_numbering.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_lock_dependency_maps.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_lock_positions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_match_patterns.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_members.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_module_identity.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_module_level.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_namespace_module_imports.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_namespace_module_names.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_namespace_module_visibility.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_nonlocal_kept_value.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_nonlocal_writeback.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_nosql_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_open_redirect_destinations.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_operator_sources.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_packaging.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_parallel.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_parse_warnings.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_parser.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_password_hashes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_plaintext_credentials.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_plugins.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_powershell_file_operand.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_project.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_project_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_project_validators.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_provenance.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_pyir_imports.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_read_entry_points.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_real_code_precision.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_redirect_targets.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_refutation.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_refutation_evidence.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_regression.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_relative_paths.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_relative_root.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_remaining_limits.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_reporters.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_rule_descriptions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_rule_descriptions_of_given_plugins.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_safe_arguments.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_sarif_injection.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_scale.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_scopes.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_secrets_sbom.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_selection_sink_proofs.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_self_state.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_sequence_conditions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_settings_scope.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_sink_called_result.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_sink_merge.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_source_manager.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_ssa.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_ssrf_destinations.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_ssrf_targets.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_structured_positions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_summary_external_call_order.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_summary_fixpoint.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_summary_reachability.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_summary_sanitizers.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_suppressions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_symbol_resolution.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_symbols.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_syntactic_rules.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_syntax_control_flow.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_syntax_coverage.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_syntax_expressions.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_taint.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_tar_implementations.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_comment_continuations.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_context_flows.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_escaping.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_filter_calls.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_filter_overrides.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_open_constructs.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_page_composition.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_request_processor.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_template_tag_backtracking.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_tornado_bottle_models.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_unreadable_templates.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_unsafe_xml_risk.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_url_proof.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_url_secret_placeholders.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_vendored_context.py +0 -0
- {coretrace_python_analyzer-0.24.0 → coretrace_python_analyzer-0.25.0}/tests/test_vex.py +0 -0
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.25.0 (2026-11-01)
|
|
4
|
+
|
|
5
|
+
### Compatibility and migration
|
|
6
|
+
|
|
7
|
+
- The filters a template's render reaches change, and with them the advisories reported
|
|
8
|
+
as `exploitable-vulnerability` through a filter, which may appear or disappear: a
|
|
9
|
+
render now follows a cycle of includes as far as Django may render it (#284), and
|
|
10
|
+
places a template's blocks where its chain of extends places them (#285).
|
|
11
|
+
- Plugin API, additive: `coretrace_python.source.LineIndex` gives the line and column of
|
|
12
|
+
each offset of a text, lines counted as `lines_of` counts them (#288).
|
|
13
|
+
|
|
14
|
+
### Templates
|
|
15
|
+
|
|
16
|
+
- A cycle of includes no longer stops the collection of the filters a render reaches
|
|
17
|
+
(#284). A template reached again on the way contributes what it reaches, its names
|
|
18
|
+
mapped through each include, as Django renders it when the project's conditions let
|
|
19
|
+
the cycle turn: a template including itself with other bindings, a recursive tree, or
|
|
20
|
+
a parent including the child that extends it. A filter reached this way may be
|
|
21
|
+
reported as `exploitable-vulnerability` where it was not. Where no cycle is reached,
|
|
22
|
+
the filters and their order do not change.
|
|
23
|
+
- A template's render is put together over its extends chain as Django places its
|
|
24
|
+
blocks (#285). A filter in a block no template of the chain places, or in a block
|
|
25
|
+
whose only placeholder a child replaces, is no longer reached, and an advisory naming
|
|
26
|
+
it is no longer `exploitable-vulnerability` through it. A block a child redefines with
|
|
27
|
+
`{{ block.super }}` inside a block it replaces now renders the parent's definition and
|
|
28
|
+
what it includes. Where the chain cannot be followed to a root, every block counts as
|
|
29
|
+
placed, as before.
|
|
30
|
+
|
|
31
|
+
### Performance
|
|
32
|
+
|
|
33
|
+
- Templates in a cycle of includes are no longer walked again on every path (#284): 20
|
|
34
|
+
levels of doubled includes closed into a cycle took 56 s, and 40 templates including
|
|
35
|
+
one another more than a minute; both now take less than a second.
|
|
36
|
+
- The positions in a template are no longer counted from its start, for each filter,
|
|
37
|
+
include, extends and load (#288): a template of 2 MB applying 160,000 filters took
|
|
38
|
+
50 s to analyse, and now takes 3 s.
|
|
39
|
+
|
|
40
|
+
### Documentation
|
|
41
|
+
|
|
42
|
+
- `docs/usage.md` documents how a cycle of includes is followed (#284) and where the
|
|
43
|
+
chain of extends places a template's blocks (#285).
|
|
44
|
+
|
|
3
45
|
## 0.24.0 (2026-10-23)
|
|
4
46
|
|
|
5
47
|
### Compatibility and migration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: coretrace-python-analyzer
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.25.0
|
|
4
4
|
Summary: Static security analysis infrastructure for Python code
|
|
5
5
|
Project-URL: Homepage, https://github.com/CoreTrace/coretrace-python-analyzer
|
|
6
6
|
Project-URL: Repository, https://github.com/CoreTrace/coretrace-python-analyzer
|
|
@@ -374,7 +374,7 @@ the directory of the checked file; a path outside it is printed as it is.
|
|
|
374
374
|
```json
|
|
375
375
|
{
|
|
376
376
|
"schema_version": 1,
|
|
377
|
-
"tool": {"name": "coretrace-python-analyzer", "version": "0.
|
|
377
|
+
"tool": {"name": "coretrace-python-analyzer", "version": "0.25.0"},
|
|
378
378
|
"root": "/home/me/project",
|
|
379
379
|
"findings": [
|
|
380
380
|
{
|
|
@@ -438,7 +438,7 @@ bytes. A single-file check lists no components.
|
|
|
438
438
|
|
|
439
439
|
```json
|
|
440
440
|
"tool": {
|
|
441
|
-
"name": "coretrace-python-analyzer", "version": "0.
|
|
441
|
+
"name": "coretrace-python-analyzer", "version": "0.25.0",
|
|
442
442
|
"components": [
|
|
443
443
|
{"kind": "plugin", "name": "curated-advisories", "version": "2026.09.25", "digest": "sha256:…"},
|
|
444
444
|
{"kind": "advisories", "name": "advisories.json", "digest": "sha256:…"}
|
|
@@ -601,10 +601,18 @@ certain of it:
|
|
|
601
601
|
- The filter's value is a context variable, directly or through `{% for %}` and
|
|
602
602
|
`{% with %}`, the templates the template includes or extends by a constant name, the
|
|
603
603
|
arguments of the filters before it, or the output of a `{% filter %}` block. A name a
|
|
604
|
-
tag binds shadows the context, and `{% include ... only %}` passes none of it.
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
604
|
+
tag binds shadows the context, and `{% include ... only %}` passes none of it. A cycle
|
|
605
|
+
of includes is followed as far as Django may render it: a template reached again on
|
|
606
|
+
the way applies its filters to what each include binds at every level, as a template
|
|
607
|
+
including itself with other bindings, or a recursive tree, does (#284).
|
|
608
|
+
- The filter renders: a template extending another renders only its blocks, and only
|
|
609
|
+
where its chain of parents places them (#285). The root's blocks are placed; a placed
|
|
610
|
+
block renders its most derived definition, and through `{{ block.super }}` the next
|
|
611
|
+
ones up, which keep the parent's content and the filters it applies; the blocks a
|
|
612
|
+
rendered definition holds are placed in turn. A block no template of the chain
|
|
613
|
+
places never renders, nor does a block whose only placeholder a child replaces. When
|
|
614
|
+
the chain cannot be followed to a root (a parent named by an expression, not found or
|
|
615
|
+
in several files, or an extends cycle), every block of the chain counts as placed.
|
|
608
616
|
- One file has the template's name; of two files of the same name, which one renders
|
|
609
617
|
depends on the loaders.
|
|
610
618
|
|
|
@@ -815,7 +823,7 @@ project's behalf would go unseen. Without a lock file, a package is never
|
|
|
815
823
|
`not_affected`. The document's `@id` derives from its statements, so two runs with the
|
|
816
824
|
same result share it; its `author` is `Unknown Author`, as OpenVEX tools write when they
|
|
817
825
|
cannot know it. Its `tooling` names the analyzer and each component with its digest
|
|
818
|
-
(`coretrace-python-analyzer 0.
|
|
826
|
+
(`coretrace-python-analyzer 0.25.0; curated-advisories 2026.09.25 (sha256:…)`), so the
|
|
819
827
|
`@id` changes with the advisory data a statement was decided with.
|
|
820
828
|
|
|
821
829
|
## Large projects
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"""Source storage and location primitives."""
|
|
2
2
|
|
|
3
|
-
from coretrace_python.source.manager import
|
|
3
|
+
from coretrace_python.source.manager import (
|
|
4
|
+
LINE_BREAK,
|
|
5
|
+
LineIndex,
|
|
6
|
+
SourceManager,
|
|
7
|
+
decode_text,
|
|
8
|
+
lines_of,
|
|
9
|
+
)
|
|
4
10
|
from coretrace_python.source.model import (
|
|
5
11
|
FileLocation,
|
|
6
12
|
ImportName,
|
|
@@ -14,6 +20,7 @@ __all__ = [
|
|
|
14
20
|
"LINE_BREAK",
|
|
15
21
|
"FileLocation",
|
|
16
22
|
"ImportName",
|
|
23
|
+
"LineIndex",
|
|
17
24
|
"Location",
|
|
18
25
|
"SourceFile",
|
|
19
26
|
"SourceId",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import re
|
|
6
|
+
from bisect import bisect_right
|
|
6
7
|
from pathlib import Path
|
|
7
8
|
|
|
8
9
|
from coretrace_python.source.model import ImportName, SourceFile, SourceId
|
|
@@ -86,6 +87,26 @@ def lines_of(text: str) -> list[str]:
|
|
|
86
87
|
return lines
|
|
87
88
|
|
|
88
89
|
|
|
90
|
+
class LineIndex:
|
|
91
|
+
"""The line and column of each offset of a text, lines counted as ``lines_of``
|
|
92
|
+
counts them. The start of each line is found once; the line of an offset is then
|
|
93
|
+
found by bisection, in time logarithmic in the lines."""
|
|
94
|
+
|
|
95
|
+
def __init__(self, text: str) -> None:
|
|
96
|
+
self._starts = [0, *(match.end() for match in LINE_BREAK.finditer(text))]
|
|
97
|
+
|
|
98
|
+
def position(self, offset: int) -> tuple[int, int]:
|
|
99
|
+
"""The one-based line and column of ``offset``."""
|
|
100
|
+
|
|
101
|
+
line = bisect_right(self._starts, offset)
|
|
102
|
+
return line, offset - self._starts[line - 1] + 1
|
|
103
|
+
|
|
104
|
+
def offset(self, line: int, column: int) -> int:
|
|
105
|
+
"""The offset of the one-based ``line`` and ``column``."""
|
|
106
|
+
|
|
107
|
+
return self._starts[line - 1] + column - 1
|
|
108
|
+
|
|
109
|
+
|
|
89
110
|
class SourceManager:
|
|
90
111
|
"""Own source text and return one canonical object for each source ID."""
|
|
91
112
|
|
|
@@ -16,9 +16,8 @@ import hashlib
|
|
|
16
16
|
import json
|
|
17
17
|
import re
|
|
18
18
|
import tomllib
|
|
19
|
-
from bisect import bisect_right
|
|
20
19
|
|
|
21
|
-
from coretrace_python.source.manager import
|
|
20
|
+
from coretrace_python.source.manager import LineIndex, lines_of
|
|
22
21
|
from coretrace_python.source.model import FileLocation, SourceId
|
|
23
22
|
|
|
24
23
|
Pointer = tuple[str | int, ...]
|
|
@@ -54,22 +53,6 @@ def pointer_text(path: Pointer) -> str:
|
|
|
54
53
|
return "".join("/" + str(part).replace("~", "~0").replace("/", "~1") for part in path)
|
|
55
54
|
|
|
56
55
|
|
|
57
|
-
class _Lines:
|
|
58
|
-
def __init__(self, text: str) -> None:
|
|
59
|
-
self._starts = [0, *(match.end() for match in LINE_BREAK.finditer(text))]
|
|
60
|
-
|
|
61
|
-
def position(self, offset: int) -> tuple[int, int]:
|
|
62
|
-
"""The one-based line and column of ``offset``."""
|
|
63
|
-
|
|
64
|
-
line = bisect_right(self._starts, offset)
|
|
65
|
-
return line, offset - self._starts[line - 1] + 1
|
|
66
|
-
|
|
67
|
-
def offset(self, line: int, column: int) -> int:
|
|
68
|
-
"""The offset of the one-based ``line`` and ``column``."""
|
|
69
|
-
|
|
70
|
-
return self._starts[line - 1] + column - 1
|
|
71
|
-
|
|
72
|
-
|
|
73
56
|
def _same(found: object, value: object) -> bool:
|
|
74
57
|
return type(found) is type(value) and found == value
|
|
75
58
|
|
|
@@ -87,7 +70,7 @@ class JsonPositions:
|
|
|
87
70
|
raise ValueError("trailing text")
|
|
88
71
|
except (ValueError, IndexError, RecursionError):
|
|
89
72
|
self._values = {}
|
|
90
|
-
self._lines =
|
|
73
|
+
self._lines = LineIndex(text)
|
|
91
74
|
|
|
92
75
|
def locate(self, path: Pointer, value: object) -> tuple[int, int] | None:
|
|
93
76
|
"""The line and column ``value`` starts at under ``path``, or None when the text
|
|
@@ -183,7 +166,7 @@ class TomlPositions:
|
|
|
183
166
|
self._lines = lines_of(text)
|
|
184
167
|
# The text with one line feed per line break, where arrays are read, once each.
|
|
185
168
|
self._text = "\n".join(self._lines)
|
|
186
|
-
self._offsets =
|
|
169
|
+
self._offsets = LineIndex(self._text)
|
|
187
170
|
self._arrays: dict[int, list[tuple[int, int]]] = {}
|
|
188
171
|
state = _LexState()
|
|
189
172
|
for number, line in enumerate(self._lines, start=1):
|