Skip to content

Commit

Permalink
fuzz: test error conditions
Browse files Browse the repository at this point in the history
  • Loading branch information
reynir authored and dinosaure committed Mar 14, 2024
1 parent d73653f commit fc8d18a
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions fuzz/fuzz.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit fc8d18a

Please sign in to comment.