dcr_json.rs 813 B

12345678910111213141516171819202122
  1. //! Fuzz dynamic client registration JSON (`RegisterRequest` deserialization).
  2. //!
  3. //! The DCR body must never panic the deserializer on any input; unknown
  4. //! fields are ignored and client-asserted secrets are never honored (the
  5. //! server mints every credential it returns).
  6. #![no_main]
  7. use d_oauth::protocol::dcr::RegisterRequest;
  8. use libfuzzer_sys::fuzz_target;
  9. fuzz_target!(|data: &[u8]| {
  10. let Ok(value) = serde_json::from_slice::<serde_json::Value>(data) else {
  11. return;
  12. };
  13. let Ok(request) = serde_json::from_value::<RegisterRequest>(value) else {
  14. return;
  15. };
  16. // Deserialization accepted the body; the request carries no server-minted
  17. // credential surface (`client_secret`, ids, timestamps are absent by type).
  18. let _ = request.redirect_uris.is_some() || request.scope.is_some();
  19. });