scope_parse.rs 765 B

12345678910111213141516171819202122232425
  1. //! Fuzz scope parsing (`protocol::scope::ScopeSet`, RFC 6749 §3.3).
  2. //!
  3. //! The raw `scope` value is hostile input: tokens split on single `0x20`
  4. //! spaces with no empty tokens, length- and count-capped. Parsing must never
  5. //! panic; an accepted set re-renders to the canonical wire form
  6. //! (single-space-joined, sorted, deduped), which parses back to the same set.
  7. #![no_main]
  8. use d_oauth::protocol::scope::ScopeSet;
  9. use libfuzzer_sys::fuzz_target;
  10. fuzz_target!(|data: &[u8]| {
  11. let Ok(raw) = core::str::from_utf8(data) else {
  12. return;
  13. };
  14. let Ok(parsed) = ScopeSet::parse(raw) else {
  15. return;
  16. };
  17. let rendered = parsed.render();
  18. let Ok(reparsed) = ScopeSet::parse(&rendered) else {
  19. return;
  20. };
  21. debug_assert_eq!(parsed, reparsed);
  22. });