From 0cb854872bb66bdec03c37a75829e0c61605768b Mon Sep 17 00:00:00 2001 From: Mick Grove Date: Tue, 7 Apr 2026 23:20:17 -0700 Subject: [PATCH] Replaced tree-sitter with a lighter parser-based context verifier built from handwritten lexers plus tl/cssparser, preserving context-dependent matching while cutting about 19 MB from the release binary. --- AGENTS.md | 2 +- CHANGELOG.md | 1 + Cargo.lock | 249 +--- Cargo.toml | 21 +- README.md | 8 +- crates/kingfisher-rules/data/rules/adobe.yml | 4 +- crates/kingfisher-scanner/src/scanner.rs | 2 +- .../assets/images/binary-size-comparison.png | Bin 0 -> 35660 bytes docs-site/docs/changelog.md | 1 + docs-site/docs/features/parsing.md | 51 +- docs-site/docs/reference/architecture.md | 8 +- docs-site/docs/reference/comparison.md | 90 +- docs/ARCHITECTURE.md | 8 +- docs/COMPARISON.md | 89 +- docs/CONTEXT_VERIFICATION.md | 49 + docs/PARSING.md | 50 +- docs/TREE_SITTER.md | 100 -- docs/binary-size-comparison.png | Bin 0 -> 35660 bytes src/cli/commands/scan.rs | 2 +- src/matcher/mod.rs | 131 +- src/parser.rs | 494 ++----- src/parser/css.rs | 173 +++ src/parser/html.rs | 67 + src/parser/lexer.rs | 1276 +++++++++++++++++ src/parser/queries.rs | 1105 -------------- src/scanner/processing.rs | 4 +- testdata/css_vulnerable.css | 8 + testdata/parsers/comment_only_context.py | 2 + tests/int_base64.rs | 6 +- tests/int_context_verification.rs | 83 ++ 30 files changed, 2056 insertions(+), 2028 deletions(-) create mode 100644 docs-site/docs/assets/images/binary-size-comparison.png create mode 100644 docs/CONTEXT_VERIFICATION.md delete mode 100644 docs/TREE_SITTER.md create mode 100644 docs/binary-size-comparison.png create mode 100644 src/parser/css.rs create mode 100644 src/parser/html.rs create mode 100644 src/parser/lexer.rs delete mode 100644 src/parser/queries.rs create mode 100644 testdata/css_vulnerable.css create mode 100644 testdata/parsers/comment_only_context.py create mode 100644 tests/int_context_verification.rs diff --git a/AGENTS.md b/AGENTS.md index 917c3f7..4d39dbc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,7 +24,7 @@ Key capabilities: - `src/cli/commands/`: CLI command implementations - `src/matcher/`: pattern matching engine - `src/scanner/`: core scanning logic -- `src/parser/`: language-aware parsing (`tree-sitter`) +- `src/parser/`: language-aware context verification (lightweight lexers, `tl` for HTML, `cssparser` for CSS) - `src/reporter/`: TOON/JSON/SARIF/HTML report generation - `src/access_map/`: access mapping analysis - `crates/kingfisher-core/`: shared types and core logic diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ee1dde..94ec62d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file. ## [v1.95.0] - Added 80+ built-in rules, bringing the bundled ruleset to 820 total. New coverage includes Amazon OAuth, Asaas, multiple Azure credential families, Bitrise, Canva, CockroachDB, eBay, Elastic, hCaptcha, Highnote, Lichess, MailerSend, Onfido, Paddle, Pangea, Persona, Pinterest, Proof, Rootly, Runpod, Telnyx, Thunderstore, Valtown, Volcengine, and more. +- Replaced tree-sitter with a lighter parser-based context verifier built from handwritten lexers plus `tl`/`cssparser`, preserving context-dependent matching while cutting about 19 MB from the release binary. - Added a `validation: type: Raw` exception path for provider-specific checks, with new raw validators for Azure Batch, FTP, Kraken, LDAP, RabbitMQ, and Redis. Also added stable request-scoped template values plus new Liquid filters for HMAC-SHA384 hex output and timestamp generation. - Expanded live validation coverage for several built-in rules, including Agora, Bitfinex, DocuSign, Dwolla, GitLab, KuCoin, RingCentral, Snowflake, Tableau, Trello, and Webex. Also tightened newly added helper regex to avoid high-match scan regressions, and made preflight-blocked raw validations report as skipped/not attempted instead of failed. diff --git a/Cargo.lock b/Cargo.lock index 36fd53a..a8b5e17 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1994,6 +1994,17 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "cssparser" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" +dependencies = [ + "dtoa-short", + "itoa", + "smallvec", +] + [[package]] name = "ctutils" version = "0.4.0" @@ -2418,6 +2429,21 @@ dependencies = [ "litrs", ] +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + [[package]] name = "dunce" version = "1.0.5" @@ -5097,6 +5123,7 @@ dependencies = [ "crc32fast", "crossbeam-channel", "crossbeam-skiplist", + "cssparser", "dashmap", "ed25519-dalek", "fixedbitset", @@ -5168,7 +5195,6 @@ dependencies = [ "sha1 0.11.0", "sha2 0.11.0", "smallvec", - "streaming-iterator", "strum 0.28.0", "strum_macros 0.28.0", "sysinfo", @@ -5181,6 +5207,7 @@ dependencies = [ "thread_local", "tikv-jemallocator", "time", + "tl", "tokei", "tokio", "tokio-postgres", @@ -5190,24 +5217,6 @@ dependencies = [ "tracing", "tracing-core", "tracing-subscriber", - "tree-sitter", - "tree-sitter-bash", - "tree-sitter-c", - "tree-sitter-c-sharp", - "tree-sitter-cpp", - "tree-sitter-css", - "tree-sitter-go", - "tree-sitter-html", - "tree-sitter-java", - "tree-sitter-javascript", - "tree-sitter-php", - "tree-sitter-python", - "tree-sitter-regex", - "tree-sitter-ruby", - "tree-sitter-rust", - "tree-sitter-toml-ng", - "tree-sitter-typescript", - "tree-sitter-yaml", "tree_magic_mini", "url", "uuid", @@ -8249,12 +8258,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" - [[package]] name = "stringprep" version = "0.1.5" @@ -8724,6 +8727,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tl" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b130bd8a58c163224b44e217b4239ca7b927d82bf6cc2fea1fc561d15056e3f7" + [[package]] name = "tls_codec" version = "0.4.2" @@ -9150,196 +9159,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "tree-sitter" -version = "0.26.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887bd495d0582c5e3e0d8ece2233666169fa56a9644d172fc22ad179ab2d0538" -dependencies = [ - "cc", - "regex", - "regex-syntax", - "serde_json", - "streaming-iterator", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-bash" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5ec769279cc91b561d3df0d8a5deb26b0ad40d183127f409494d6d8fc53062" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-c" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a3aad8f0129083a59fe8596157552d2bb7148c492d44c21558d68ca1c722707" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-c-sharp" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67f06accca7b45351758663b8215089e643d53bd9a660ce0349314263737fcb0" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-cpp" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2196ea9d47b4ab4a31b9297eaa5a5d19a0b121dceb9f118f6790ad0ab94743" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-css" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5cbc5e18f29a2c6d6435891f42569525cf95435a3e01c2f1947abcde178686f" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-go" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8560a4d2f835cc0d4d2c2e03cbd0dde2f6114b43bc491164238d333e28b16ea" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-html" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261b708e5d92061ede329babaaa427b819329a9d427a1d710abb0f67bbef63ee" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-java" -version = "0.23.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aa6cbcdc8c679b214e616fd3300da67da0e492e066df01bcf5a5921a71e90d6" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-javascript" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68204f2abc0627a90bdf06e605f5c470aa26fdcb2081ea553a04bdad756693f5" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-language" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009994f150cc0cd50ff54917d5bc8bffe8cad10ca10d81c34da2ec421ae61782" - -[[package]] -name = "tree-sitter-php" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c17c3ab69052c5eeaa7ff5cd972dd1bc25d1b97ee779fec391ad3b5df5592" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-python" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf85fd39652e740bf60f46f4cda9492c3a9ad75880575bf14960f775cb74a1c" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-regex" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd8a59be9f0ac131fd8f062eaaba14882b2fa5a6a7882a20134cb1d60df2e625" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-ruby" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0484ea4ef6bb9c575b4fdabde7e31340a8d2dbc7d52b321ac83da703249f95" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-rust" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439e577dbe07423ec2582ac62c7531120dbfccfa6e5f92406f93dd271a120e45" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-toml-ng" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9adc2c898ae49730e857d75be403da3f92bb81d8e37a2f918a08dd10de5ebb1" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5f76ed8d947a75cc446d5fccd8b602ebf0cde64ccf2ffa434d873d7a575eff" -dependencies = [ - "cc", - "tree-sitter-language", -] - -[[package]] -name = "tree-sitter-yaml" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c223db85f05e34794f065454843b0668ebc15d240ada63e2b5939f43ce7c97" -dependencies = [ - "cc", - "tree-sitter-language", -] - [[package]] name = "tree_magic_mini" version = "3.2.2" diff --git a/Cargo.toml b/Cargo.toml index 3bc7011..a9cbb83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -168,28 +168,11 @@ reqwest-middleware = "0.5.1" reqwest-middleware-octorust = { package = "reqwest-middleware", version = "0.4.2" } tracing-subscriber = {version = "0.3.22", features = ["env-filter"] } tracing-core = "0.1.35" -tree-sitter = "0.26.5" aws-smithy-http-client = "1.1.10" aws-smithy-runtime-api = "1.11.4" aws-smithy-types = "1.4.4" -tree-sitter-bash = "0.25.1" -tree-sitter-c = "0.24.1" -tree-sitter-c-sharp = "0.23.1" -tree-sitter-cpp = "0.23.4" -tree-sitter-css = "0.25.0" -tree-sitter-go = "0.25.0" -tree-sitter-html = "0.23.2" -tree-sitter-java = "0.23.5" -tree-sitter-javascript = "0.25.0" -tree-sitter-php = "0.24.2" -tree-sitter-python = "0.25.0" -tree-sitter-ruby = "0.23.1" -tree-sitter-rust = "0.24.0" -tree-sitter-toml-ng = "0.7.0" -tree-sitter-typescript = "0.23.2" -tree-sitter-yaml = "0.7.2" -streaming-iterator = "0.1.9" -tree-sitter-regex = "0.25.0" +cssparser = { version = "0.37.0", default-features = false } +tl = "0.7.8" tree_magic_mini = "3.2" content_inspector = "0.2.4" rustc-hash = "2.1.1" diff --git a/README.md b/README.md index 5e1aad6..c89ea8f 100644 --- a/README.md +++ b/README.md @@ -401,7 +401,7 @@ kingfisher scan /path/to/code kingfisher scan ~/src/myrepo --no-validate # Turbo mode: run as fast as possible by disabling Git commit metadata, Base64 decoding, -# MIME sniffing, language detection, and tree-sitter parsing +# MIME sniffing, language detection, and parser-based context verification # (findings omit commit context, Base64-only matches, MIME type, and language metadata) kingfisher scan ~/src/myrepo --turbo @@ -510,7 +510,7 @@ cat /path/to/file.py | kingfisher scan - kingfisher scan /some/file --max-file-size 500 # Turbo mode: equivalent to --commit-metadata=false --no-base64 and disables MIME sniffing, -# language detection/tree-sitter parsing for maximum speed +# language detection/parser-based context verification for maximum speed # No Git commit metadata (author, date, hash), Base64 decoding, MIME, or language metadata in findings kingfisher scan /path/to/repo --turbo @@ -725,7 +725,7 @@ kingfisher scan /tmp/repo --branch feature-1 \ | [FINGERPRINT.md](docs/FINGERPRINT.md) | Understanding finding fingerprints and deduplication | | [COMPARISON.md](docs/COMPARISON.md) | Benchmark results and performance comparisons | | [PARSING.md](docs/PARSING.md) | Language-aware parsing details | -| [TREE_SITTER.md](docs/TREE_SITTER.md) | Tree-sitter scanning flow, verification gates, and fallback behavior | +| [CONTEXT_VERIFICATION.md](docs/CONTEXT_VERIFICATION.md) | Context-verification flow, gates, and parser backends | # Library Usage @@ -751,7 +751,7 @@ Since then it has evolved far beyond that starting point, introducing live valid - **Live validation** of detected secrets directly within rules - **Hundreds of new built-in rules** and an expanded YAML rule schema - **Baseline management** to suppress known findings over time -- **Tree-sitter parsing** layered on Hyperscan for language-aware detection +- **Parser-based context verification** layered on Hyperscan for language-aware detection - **More scan targets** (GitLab, Bitbucket, Gitea, Jira, Confluence, Slack, Microsoft Teams, S3, GCS, Docker, Hugging Face, etc.) - **Compressed Files**, **SQLite database**, and **Python bytecode (.pyc)** scanning support - **New storage model** (in-memory + Bloom filter, replacing SQLite) diff --git a/crates/kingfisher-rules/data/rules/adobe.yml b/crates/kingfisher-rules/data/rules/adobe.yml index 63a2062..5983e12 100644 --- a/crates/kingfisher-rules/data/rules/adobe.yml +++ b/crates/kingfisher-rules/data/rules/adobe.yml @@ -70,7 +70,7 @@ rules: examples: - | { - "client_credentials": { + "adobe_client_credentials": { "client_id": "a65b0146769d433a835f36660881db50", "client_secret": "p8e-ibndcvsmAp9ZgPBZ606FSlYIZVlsZ-g5" }, @@ -119,7 +119,7 @@ rules: examples: - | { - "client_credentials": { + "adobe_client_credentials": { "client_id": "a65b0146769d433a835f36660881db50", "client_secret": "p8e-ibndcvsmAp9ZgPBZ606FSlYIZVlsZ-g5" }, diff --git a/crates/kingfisher-scanner/src/scanner.rs b/crates/kingfisher-scanner/src/scanner.rs index dc8ef6c..55dff65 100644 --- a/crates/kingfisher-scanner/src/scanner.rs +++ b/crates/kingfisher-scanner/src/scanner.rs @@ -26,7 +26,7 @@ pub struct ScannerConfig { /// Override the minimum entropy threshold for all rules. pub min_entropy_override: Option, - /// Language hint for tree-sitter parsing (e.g., "python", "javascript"). + /// Language hint for parser-based context verification (e.g., "python", "javascript"). pub language_hint: Option, /// Whether to redact secrets in findings. diff --git a/docs-site/docs/assets/images/binary-size-comparison.png b/docs-site/docs/assets/images/binary-size-comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..1353d6d42e90249c6c7479f853d1f0efbc2c8fb0 GIT binary patch literal 35660 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
EM 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 Xg` / `