From 0938ae44f669ea5241297fb26e5a72e8c7fd4820 Mon Sep 17 00:00:00 2001 From: Thomas Gazagnaire Date: Tue, 4 Apr 2017 11:44:23 +0200 Subject: [PATCH] miragesdk: fail early on short read/write returning 0 Signed-off-by: Thomas Gazagnaire --- projects/miragesdk/src/sdk/IO.ml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/projects/miragesdk/src/sdk/IO.ml b/projects/miragesdk/src/sdk/IO.ml index a03189370..44c318344 100644 --- a/projects/miragesdk/src/sdk/IO.ml +++ b/projects/miragesdk/src/sdk/IO.ml @@ -9,7 +9,8 @@ let rec really_write fd buf off len = | len -> Log.debug (fun l -> l "really_write off=%d len=%d" off len); Lwt_unix.write fd buf off len >>= fun n -> - really_write fd buf (off+n) (len-n) + if n = 0 then Lwt.fail_with "write 0" + else really_write fd buf (off+n) (len-n) let write fd buf = really_write fd buf 0 (String.length buf) @@ -19,7 +20,8 @@ let rec really_read fd buf off len = | len -> Log.debug (fun l -> l "really_read off=%d len=%d" off len); Lwt_unix.read fd buf off len >>= fun n -> - really_read fd buf (off+n) (len-n) + if n = 0 then Lwt.fail_with "read 0" + else really_read fd buf (off+n) (len-n) let read_all fd = Log.debug (fun l -> l "read_all"); @@ -27,9 +29,11 @@ let read_all fd = let buf = Bytes.create len in let rec loop acc = Lwt_unix.read fd buf 0 len >>= fun n -> - let acc = String.sub buf 0 n :: acc in - if n <= len then Lwt.return (List.rev acc) - else loop acc + if n = 0 then Lwt.fail_with "read 0" + else + let acc = String.sub buf 0 n :: acc in + if n <= len then Lwt.return (List.rev acc) + else loop acc in loop [] >|= fun bufs -> String.concat "" bufs @@ -39,10 +43,12 @@ let read_n fd len = let buf = Bytes.create len in let rec loop acc len = Lwt_unix.read fd buf 0 len >>= fun n -> - let acc = String.sub buf 0 n :: acc in - match len - n with - | 0 -> Lwt.return (List.rev acc) - | r -> loop acc r + if n = 0 then Lwt.fail_with "read 0" + else + let acc = String.sub buf 0 n :: acc in + match len - n with + | 0 -> Lwt.return (List.rev acc) + | r -> loop acc r in loop [] len >|= fun bufs -> String.concat "" bufs