use wafrift_evolution::body_padding::pad;
#[test]
fn regression_multibyte_content_type_param_no_panic() {
let body = b"a=1&b=2";
for ct in [
"multipart/form-data; boundÿ=----x", "multipart/form-data;日本語ary=----x", "multipart/form-data; 𝕓𝕠𝕦𝕟𝕕ary=zzz", "multipart/form-data; boundar\u{0301}=x", "x; café=1; boundary=----realone", "multipart/form-data;\u{00A0}boundary=----nb", "boundary=短", "ÿ", ] {
let _ = pad(body, ct, 4096);
}
let out = pad(body, "multipart/form-data; boundary=----WafriftX", 4096);
let _ = out; }
#[test]
fn pad_survives_adversarial_bodies_and_content_types() {
let bodies: [&[u8]; 5] = [
b"",
b"k=v",
&[0u8, 1, 2, 0xFF, 0xFE],
"café=値&🦀=1".as_bytes(),
&[b'A'; 100_000],
];
let cts = [
"",
";;;;;;;;;;",
"=========",
"boundary=",
"multipart/form-data; boundary=\u{0}\u{1}\u{2}",
"application/json; charset=日本語",
&"boundary=".repeat(500),
"\u{202E}multipart; boundary=x",
];
for b in bodies {
for ct in cts {
for n in [0usize, 1, 4096, 1 << 20] {
let _ = pad(b, ct, n);
}
}
}
}