token_form.rs 717 B

123456789101112131415161718192021222324
  1. //! Fuzz the opaque token-form parser (`TokenHash::parse_storage_string`).
  2. //!
  3. //! The parser must never panic on any input; an accepted value must
  4. //! re-render byte-identically (parse-print stability).
  5. #![no_main]
  6. use d_oauth::crypto::tokens::TokenHash;
  7. use libfuzzer_sys::fuzz_target;
  8. fuzz_target!(|data: &[u8]| {
  9. let Ok(text) = core::str::from_utf8(data) else {
  10. return;
  11. };
  12. let Ok(parsed) = TokenHash::parse_storage_string(text) else {
  13. return;
  14. };
  15. // Accepted values re-render to the exact input (canonical form only).
  16. let rendered = parsed.to_storage_string();
  17. let Ok(reparsed) = TokenHash::parse_storage_string(&rendered) else {
  18. return;
  19. };
  20. debug_assert_eq!(parsed, reparsed);
  21. });