refactor: consolidate input validation into src/validate.rs#305
Conversation
Move scattered validation primitives (character allowlists, format validators, injection detectors, container/Docker/DNS validators) from engine.rs and compile/common.rs into a single validate.rs module. - Move 5 is_valid_* allowlist functions from engine.rs - Move is_valid_parameter_name, is_valid_env_var_name, is_safe_tool_name from compile/common.rs - Move container/Docker/MCP validators from compile/common.rs - Add shared predicates: contains_ado_expression, contains_pipeline_command, contains_newline, reject_pipeline_injection, validate_dns_domain - Simplify validate_front_matter_identity (~70 → ~12 lines) - Remove dead sanitize_light() from sanitize.rs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
🔍 Rust PR ReviewSummary: Looks good — clean consolidation with faithful logic preservation. Two minor issues worth addressing. Findings
|
- Remove misleading 're-export' and 'thin wrapper' comments from
common.rs that no longer had corresponding code beneath them
- Restore explicit empty-key check in copilot_env() for a clearer
error message ('empty key' vs generic 'not a valid env var name')
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
🔍 Rust PR ReviewSummary: Clean consolidation — one clear documentation/implementation mismatch to fix, otherwise well-structured. Findings🐛 Bugs / Logic Issues
✅ What Looks Good
|
Summary
Consolidates scattered input validation primitives from
engine.rsandcompile/common.rsinto a singlesrc/validate.rsmodule.Problem
Input validation was duplicated across 3+ files:
engine.rshad 5 privateis_valid_*allowlist functions + inline ADO/pipeline injection checkscompile/common.rshad ~15 validation functions including duplicates of env-var-name and ADO expression checkssanitize.rshad a deadsanitize_light()functionChanges
Created
src/validate.rs— single source of truth for ~20 structural validators:engine.rscompile/common.rscompile/common.rscontains_ado_expression,contains_pipeline_command,contains_newline,reject_pipeline_injection,validate_dns_domainSimplified
engine.rs— imports fromvalidate.rs, uses shared predicates instead of inline checks.Simplified
compile/common.rs—validate_front_matter_identity()reduced from ~70 lines to ~12 lines.Removed dead code —
sanitize_light()and its tests fromsanitize.rs.Design decisions
BLOCKED_ARG_PREFIXES,BLOCKED_ENV_KEYS) stays inengine.rscompile/common.rsSanitizeConfig/SanitizeContenttraits stay insanitize.rs(content transformation ≠ structural validation)Verification