// TEST-4: cargo-fuzz target for the pg_trickle parser / rewrite pipeline. // // This target exercises all pure-Rust rewrite-pass entry points with // arbitrary byte sequences. The goal is to ensure that no input can cause // an abort, buffer overflow, or panic in the pre-parser validation layer. // // Functions under test (pure Rust, no backend required): // - validate_cron (api/helpers) // - parse_schedule (api/helpers) // - detect_select_star (api/helpers) // - detect_volatile_functions (api/helpers — OP-6) // - expr_has_aggregate (dvm/parser/rewrites — internal) // - contains_word_boundary (dvm/parser/rewrites — internal) // // Run locally with: // cargo +nightly fuzz run parser_fuzz -- -max_total_time=60 // // ⚠ The rewrite functions that call pg_parse_query() are NOT exercised here // because they require a live PostgreSQL backend. Integration-level fuzzing // of those functions is left to libpq-based corpus drivers. #![no_main] use libfuzzer_sys::fuzz_target; fuzz_target!(|data: &[u8]| { // Require valid UTF-8 so we can pass &str to the functions under test. let Ok(s) = std::str::from_utf8(data) else { return; }; // ------------------------------------------------------------------- // 1. Schedule parsing — must never panic or abort. // ------------------------------------------------------------------- let _ = pg_trickle::api::helpers::parse_schedule_pub(s); // ------------------------------------------------------------------- // 2. Cron validation — must never panic or abort. // ------------------------------------------------------------------- let _ = pg_trickle::api::helpers::validate_cron_pub(s); // ------------------------------------------------------------------- // 3. SELECT * detection — must never panic or abort. // ------------------------------------------------------------------- let _ = pg_trickle::api::helpers::detect_select_star_pub(s); // ------------------------------------------------------------------- // 4. Volatile function detection (OP-6) — must never panic or abort. // ------------------------------------------------------------------- let _ = pg_trickle::api::helpers::detect_volatile_functions_pub(s); });