diff --git a/fuzz/fuzz.ml b/fuzz/fuzz.ml index 2bc8581..bc92c13 100644 --- a/fuzz/fuzz.ml +++ b/fuzz/fuzz.ml @@ -9,18 +9,24 @@ let hash = const (Pack Digestif.sha512); ] -let with_get_into_bytes off (type ctx) +let with_get_into_bytes off len (type ctx) (module Hash : Digestif.S with type ctx = ctx) (ctx : ctx) = - let buf = Bytes.create (off + Hash.digest_size) in - Hash.get_into_bytes ctx ~off buf ; + let buf = Bytes.create len in + let () = + try Hash.get_into_bytes ctx ~off buf + with Invalid_argument e -> ( + (* Skip if the invalid argument is valid; otherwise fail *) + match Bytes.sub buf off Hash.digest_size with + | _ -> failf "Hash.get_into_bytes: Invalid_argument %S" e + | exception Invalid_argument _ -> bad_test ()) in Bytes.sub_string buf off Hash.digest_size let () = - add_test ~name:"get_into_bytes" [ hash; int8; bytes ] - @@ fun (Pack hash) off bytes -> + add_test ~name:"get_into_bytes" [ hash; int8; range 1024; bytes ] + @@ fun (Pack hash) off len bytes -> let (module Hash) = Digestif.module_of hash in let ctx = Hash.empty in let ctx = Hash.feed_string ctx bytes in - let a = with_get_into_bytes (abs off) (module Hash) ctx in + let a = with_get_into_bytes off len (module Hash) ctx in let b = Hash.(to_raw_string (get ctx)) in check_eq ~eq:String.equal a b