2026-05-17 14:29:14 -05:00
|
|
|
//! Per-language [`super::FrameworkAdapter`] dispatch table.
|
|
|
|
|
//!
|
|
|
|
|
//! Phase 01 (Track L.0) ships an empty table for every language; the
|
|
|
|
|
//! [`super::FrameworkAdapter`] trait, [`super::FrameworkBinding`] data
|
|
|
|
|
//! shape, and the [`super::detect_binding`] dispatcher are wired
|
|
|
|
|
//! through so subsequent Track-L phases only need to register a
|
|
|
|
|
//! concrete adapter here.
|
|
|
|
|
//!
|
|
|
|
|
//! # Ordering contract
|
|
|
|
|
//!
|
|
|
|
|
//! Within each `static` slice, adapters must be listed in alphabetical
|
|
|
|
|
//! order of [`super::FrameworkAdapter::name`]. The lexical ordering
|
|
|
|
|
//! gives a deterministic first-match result that survives merges /
|
|
|
|
|
//! rebases without subtle re-ordering bugs. A `framework` unit test
|
|
|
|
|
//! ([`super::tests::registry_is_empty_for_every_lang_phase_01`])
|
|
|
|
|
//! captures the Phase-01 starting baseline so a phase that registers
|
|
|
|
|
//! its first adapter is forced to update both the slice *and* the
|
|
|
|
|
//! regression guard in the same change.
|
|
|
|
|
|
|
|
|
|
use super::FrameworkAdapter;
|
|
|
|
|
use crate::symbol::Lang;
|
|
|
|
|
|
|
|
|
|
/// Adapters registered for `lang`, returned in deterministic
|
|
|
|
|
/// first-match order. Returns an empty slice for languages that have
|
|
|
|
|
/// no adapters registered yet.
|
|
|
|
|
pub fn adapters_for(lang: Lang) -> &'static [&'static dyn FrameworkAdapter] {
|
|
|
|
|
match lang {
|
|
|
|
|
Lang::Rust => RUST,
|
|
|
|
|
Lang::C => C,
|
|
|
|
|
Lang::Cpp => CPP,
|
|
|
|
|
Lang::Java => JAVA,
|
|
|
|
|
Lang::Go => GO,
|
|
|
|
|
Lang::Php => PHP,
|
|
|
|
|
Lang::Python => PYTHON,
|
|
|
|
|
Lang::Ruby => RUBY,
|
|
|
|
|
Lang::TypeScript => TYPESCRIPT,
|
|
|
|
|
Lang::JavaScript => JAVASCRIPT,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-17 16:37:20 -05:00
|
|
|
// Phase 03 (Track J.1) registers per-language deserialize-sink
|
2026-05-17 18:51:13 -05:00
|
|
|
// adapters into the matching language slice. Phase 04 (Track J.2)
|
|
|
|
|
// adds the SSTI-sink adapters. Within each slice adapters are
|
|
|
|
|
// listed in alphabetical order of [`FrameworkAdapter::name`] so a
|
|
|
|
|
// later phase that appends a new adapter cannot silently re-order
|
|
|
|
|
// the existing first-match.
|
2026-05-18 02:32:13 -05:00
|
|
|
static RUST: &[&dyn FrameworkAdapter] = &[
|
|
|
|
|
&super::adapters::HeaderRustAdapter,
|
|
|
|
|
&super::adapters::RedirectRustAdapter,
|
2026-05-20 12:24:31 -05:00
|
|
|
&super::adapters::RustActixAdapter,
|
|
|
|
|
&super::adapters::RustAxumAdapter,
|
|
|
|
|
&super::adapters::RustRocketAdapter,
|
|
|
|
|
&super::adapters::RustWarpAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
];
|
2026-05-17 14:29:14 -05:00
|
|
|
static C: &[&dyn FrameworkAdapter] = &[];
|
|
|
|
|
static CPP: &[&dyn FrameworkAdapter] = &[];
|
2026-05-17 18:51:13 -05:00
|
|
|
static JAVA: &[&dyn FrameworkAdapter] = &[
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::HeaderJavaAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
&super::adapters::JavaDeserializeAdapter,
|
2026-05-18 13:46:43 -05:00
|
|
|
&super::adapters::JavaMicronautAdapter,
|
|
|
|
|
&super::adapters::JavaQuarkusAdapter,
|
|
|
|
|
&super::adapters::JavaServletAdapter,
|
|
|
|
|
&super::adapters::JavaSpringAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
&super::adapters::JavaThymeleafAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::KafkaJavaAdapter,
|
2026-05-17 22:32:44 -05:00
|
|
|
&super::adapters::LdapSpringAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::RabbitJavaAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
&super::adapters::RedirectJavaAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::SqsJavaAdapter,
|
2026-05-17 23:47:12 -05:00
|
|
|
&super::adapters::XpathJavaAdapter,
|
2026-05-17 20:39:12 -05:00
|
|
|
&super::adapters::XxeJavaAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
];
|
2026-05-18 01:08:32 -05:00
|
|
|
static GO: &[&dyn FrameworkAdapter] = &[
|
2026-05-20 12:24:31 -05:00
|
|
|
&super::adapters::GoChiAdapter,
|
|
|
|
|
&super::adapters::GoEchoAdapter,
|
|
|
|
|
&super::adapters::GoFiberAdapter,
|
|
|
|
|
&super::adapters::GoGinAdapter,
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::HeaderGoAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::NatsGoAdapter,
|
|
|
|
|
&super::adapters::PubsubGoAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
&super::adapters::RedirectGoAdapter,
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::XxeGoAdapter,
|
|
|
|
|
];
|
2026-05-17 18:51:13 -05:00
|
|
|
static PHP: &[&dyn FrameworkAdapter] = &[
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::HeaderPhpAdapter,
|
2026-05-17 22:32:44 -05:00
|
|
|
&super::adapters::LdapPhpAdapter,
|
2026-05-18 16:33:19 -05:00
|
|
|
&super::adapters::PhpCodeIgniterAdapter,
|
|
|
|
|
&super::adapters::PhpLaravelAdapter,
|
|
|
|
|
&super::adapters::PhpSymfonyAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
&super::adapters::PhpTwigAdapter,
|
|
|
|
|
&super::adapters::PhpUnserializeAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
&super::adapters::RedirectPhpAdapter,
|
2026-05-17 23:47:12 -05:00
|
|
|
&super::adapters::XpathPhpAdapter,
|
2026-05-17 20:39:12 -05:00
|
|
|
&super::adapters::XxePhpAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
];
|
|
|
|
|
static PYTHON: &[&dyn FrameworkAdapter] = &[
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::HeaderPythonAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::KafkaPythonAdapter,
|
2026-05-17 22:32:44 -05:00
|
|
|
&super::adapters::LdapPythonAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::PubsubPythonAdapter,
|
2026-05-18 11:02:46 -05:00
|
|
|
&super::adapters::PythonDjangoAdapter,
|
|
|
|
|
&super::adapters::PythonFastApiAdapter,
|
|
|
|
|
&super::adapters::PythonFlaskAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
&super::adapters::PythonJinja2Adapter,
|
|
|
|
|
&super::adapters::PythonPickleAdapter,
|
2026-05-18 11:02:46 -05:00
|
|
|
&super::adapters::PythonStarletteAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::RabbitPythonAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
&super::adapters::RedirectPythonAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::SqsPythonAdapter,
|
2026-05-17 23:47:12 -05:00
|
|
|
&super::adapters::XpathPythonAdapter,
|
2026-05-17 20:39:12 -05:00
|
|
|
&super::adapters::XxePythonAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
];
|
|
|
|
|
static RUBY: &[&dyn FrameworkAdapter] = &[
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::HeaderRubyAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
&super::adapters::RedirectRubyAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
&super::adapters::RubyErbAdapter,
|
2026-05-18 14:37:05 -05:00
|
|
|
&super::adapters::RubyHanamiAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
&super::adapters::RubyMarshalAdapter,
|
2026-05-18 14:37:05 -05:00
|
|
|
&super::adapters::RubyRailsAdapter,
|
|
|
|
|
&super::adapters::RubySinatraAdapter,
|
2026-05-17 20:39:12 -05:00
|
|
|
&super::adapters::XxeRubyAdapter,
|
2026-05-17 18:51:13 -05:00
|
|
|
];
|
2026-05-18 08:02:10 -05:00
|
|
|
static TYPESCRIPT: &[&dyn FrameworkAdapter] = &[
|
|
|
|
|
&super::adapters::PpJsonDeepAssignTsAdapter,
|
|
|
|
|
&super::adapters::PpLodashMergeTsAdapter,
|
|
|
|
|
&super::adapters::PpObjectAssignTsAdapter,
|
2026-05-18 12:14:53 -05:00
|
|
|
&super::adapters::TsNestAdapter,
|
2026-05-18 08:02:10 -05:00
|
|
|
];
|
2026-05-17 23:47:12 -05:00
|
|
|
static JAVASCRIPT: &[&dyn FrameworkAdapter] = &[
|
2026-05-18 01:08:32 -05:00
|
|
|
&super::adapters::HeaderJsAdapter,
|
2026-05-18 12:14:53 -05:00
|
|
|
&super::adapters::JsExpressAdapter,
|
|
|
|
|
&super::adapters::JsFastifyAdapter,
|
2026-05-17 23:47:12 -05:00
|
|
|
&super::adapters::JsHandlebarsAdapter,
|
2026-05-18 12:14:53 -05:00
|
|
|
&super::adapters::JsKoaAdapter,
|
|
|
|
|
&super::adapters::JsNestAdapter,
|
2026-05-18 08:02:10 -05:00
|
|
|
&super::adapters::PpJsonDeepAssignJsAdapter,
|
|
|
|
|
&super::adapters::PpLodashMergeJsAdapter,
|
|
|
|
|
&super::adapters::PpObjectAssignJsAdapter,
|
2026-05-18 02:32:13 -05:00
|
|
|
&super::adapters::RedirectJsAdapter,
|
2026-05-20 16:03:40 -05:00
|
|
|
&super::adapters::SqsNodeAdapter,
|
2026-05-17 23:47:12 -05:00
|
|
|
&super::adapters::XpathJsAdapter,
|
|
|
|
|
];
|