address review feedback

This commit is contained in:
Anurag Soni 2021-05-13 19:49:28 -04:00
parent da9f01586a
commit 13400f0797

View file

@ -326,22 +326,14 @@ module Headers = struct
/ "`" / "|" / "~" / DIGIT / ALPHA ; any VCHAR, except delimiters
Reference: https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 *)
let is_tchar = function
| '0' .. '9'
| 'a' .. 'z'
| 'A' .. 'Z'
| '!' | '#' | '$' | '%' | '&' | '\'' | '*' | '+' | '-' | '.' | '^' | '_' | '`'
| '|' | '~' ->
true
| '0' .. '9' | 'a' .. 'z' | 'A' .. 'Z'
| '!' | '#' | '$' | '%' | '&' | '\'' | '*' | '+' | '-' | '.' | '^'
| '_' | '`' | '|' | '~' -> true
| _ -> false
let for_all pred s =
let len = String.length s in
let rec loop idx =
if idx = len then true
else if pred (String.unsafe_get s idx) then loop (idx + 1)
else false
in
loop 0
try String.iter (fun c->if not (pred c) then raise Exit) s; true
with Exit -> false
let parse_ ~buf (bs:byte_stream) : t =
let rec loop acc =
@ -354,10 +346,10 @@ let is_tchar = function
try
let i = String.index line ':' in
let k = String.sub line 0 i in
if for_all is_tchar k then (
if not (for_all is_tchar k) then (
invalid_arg (Printf.sprintf "Invalid header key: %S" k));
let v = String.sub line (i+1) (String.length line-i-1) |> String.trim in
k,v)
else invalid_arg (Printf.sprintf "Invalid header key: %S" k)
k,v
with _ -> bad_reqf 400 "invalid header line: %S" line
in
loop ((String.lowercase_ascii k,v)::acc)