attackstr 0.2.0

Grammar-based security payload generation — TOML-driven, composable, encoding-aware
Documentation
import re

with open("src/adversarial_tests.rs", "r") as f:
    content = f.read()

content = content.replace(
'''        for (_desc, template) in test_cases {
            let mut db = PayloadDb::new();
            let toml = format!(
                r#"
[grammar]
name = "edge"
sink_category = "edge-cat"

[[techniques]]
name = "t1"
template = "{template}"
"#
            );

            let result = db.load_toml(&toml);
            assert!(result.is_ok());
            let payloads = db.payloads("edge-cat");
            assert_eq!(payloads.len(), 1);
            assert_eq!(payloads[0].text, template);
        }''',
'''        for (_desc, template) in test_cases {
            let mut db = PayloadDb::new();
            let toml = format!(
                r#"
[grammar]
name = "edge"
sink_category = "edge-cat"

[[techniques]]
name = "t1"
template = "{template}"
"#
            );

            let result = db.load_toml(&toml);
            if template.contains('{') && !template[template.find('{')..].contains('}') {
                assert!(result.is_err(), "Template with unclosed brace should error");
            } else {
                assert!(result.is_ok());
                let payloads = db.payloads("edge-cat");
                assert_eq!(payloads.len(), 1);
                assert_eq!(payloads[0].text, template);
            }
        }''')

with open("src/adversarial_tests.rs", "w") as f:
    f.write(content)