Skip to content

Commit dfcc1b1

Browse files
committed
Better treatment of end of input while parsing request
1 parent 0ff12a6 commit dfcc1b1

1 file changed

Lines changed: 10 additions & 9 deletions

File tree

src/Input.ml

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,7 @@ let of_io ?(buf_size=64 * 1024) (sock:Io.t) : t =
137137

138138
let rec iter f (self:t) : unit =
139139
self.fill_buf();
140-
if self.len=0 then (
141-
self.close();
142-
) else (
140+
if self.len>0 then (
143141
f self.bs self.off self.len;
144142
self.consume self.len;
145143
(iter [@tailcall]) f self
@@ -345,6 +343,7 @@ let read_until ~buf ~target (self:t) : unit =
345343
let pos = ref 0 in
346344
while !pos < len do
347345
self.fill_buf();
346+
if self.len = 0 then failwith "Unexpected end of input";
348347
try
349348
let i = index_rec self.bs (self.off+self.len) self.off c0 in
350349
let r = i - self.off + 1 in
@@ -364,9 +363,10 @@ let read_until ~buf ~target (self:t) : unit =
364363
end
365364
else incr pos
366365
done
367-
with Not_found ->
368-
Buffer.add_subbytes buf self.bs self.off self.len;
369-
self.consume self.len
366+
with
367+
| Not_found ->
368+
Buffer.add_subbytes buf self.bs self.off self.len;
369+
self.consume self.len
370370
done
371371

372372
(*$= & ~printer:Q.(Print.string)
@@ -394,6 +394,7 @@ let read_path ~buf (self:t) : (string * string list * (string * string) list) =
394394
in
395395
while !cont do
396396
self.fill_buf();
397+
if self.len = 0 then raise (failwith "Unexpected end of input");
397398
try
398399
let (i,nb) = index_rec3 enc self.bs (self.off+self.len) self.off '/' '?' ' ' in
399400
let r = i - self.off + 1 in
@@ -416,6 +417,7 @@ let read_path ~buf (self:t) : (string * string list * (string * string) list) =
416417
let last_key = ref "" in
417418
while !cont_query do
418419
self.fill_buf();
420+
if self.len = 0 then raise (failwith "Unexpected end of input");
419421
try
420422
let (i,nb) = index_rec3 enc self.bs (self.off+self.len) self.off '=' '&' ' ' in
421423
let r = i - self.off + 1 in
@@ -465,9 +467,7 @@ let read_line_into (self:t) ~buf : unit =
465467
let continue = ref true in
466468
while !continue do
467469
self.fill_buf();
468-
if self.len=0 then (
469-
continue := false;
470-
) else
470+
if self.len=0 then failwith "Unexpected end of input" else
471471
try
472472
let j, nb = index_rec2 self.bs (self.off + self.len) self.off '\r' 2 '\n' 1 in
473473
Buffer.add_subbytes buf self.bs self.off (j - self.off); (* without \r\n *)
@@ -480,6 +480,7 @@ let read_line_into (self:t) ~buf : unit =
480480
self.off <- self.off + self.len;
481481
self.len <- 0;
482482
self.fill_buf();
483+
if self.len = 0 then raise Not_found;
483484
self.consume to_eat
484485
end
485486
with Not_found ->

0 commit comments

Comments
 (0)