mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-14 14:56:13 -05:00
address review feedback
This commit is contained in:
parent
da9f01586a
commit
13400f0797
1 changed files with 15 additions and 23 deletions
|
|
@ -321,27 +321,19 @@ module Headers = struct
|
||||||
let pp_pair out (k,v) = Format.fprintf out "@[<h>%s: %s@]" k v in
|
let pp_pair out (k,v) = Format.fprintf out "@[<h>%s: %s@]" k v in
|
||||||
Format.fprintf out "@[<v>%a@]" (Format.pp_print_list pp_pair) l
|
Format.fprintf out "@[<v>%a@]" (Format.pp_print_list pp_pair) l
|
||||||
|
|
||||||
(* token = 1*tchar
|
(* token = 1*tchar
|
||||||
tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_"
|
tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" / "_"
|
||||||
/ "`" / "|" / "~" / DIGIT / ALPHA ; any VCHAR, except delimiters
|
/ "`" / "|" / "~" / DIGIT / ALPHA ; any VCHAR, except delimiters
|
||||||
Reference: https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 *)
|
Reference: https://datatracker.ietf.org/doc/html/rfc7230#section-3.2 *)
|
||||||
let is_tchar = function
|
let is_tchar = function
|
||||||
| '0' .. '9'
|
| '0' .. '9' | 'a' .. 'z' | 'A' .. 'Z'
|
||||||
| 'a' .. 'z'
|
| '!' | '#' | '$' | '%' | '&' | '\'' | '*' | '+' | '-' | '.' | '^'
|
||||||
| 'A' .. 'Z'
|
| '_' | '`' | '|' | '~' -> true
|
||||||
| '!' | '#' | '$' | '%' | '&' | '\'' | '*' | '+' | '-' | '.' | '^' | '_' | '`'
|
| _ -> false
|
||||||
| '|' | '~' ->
|
|
||||||
true
|
|
||||||
| _ -> false
|
|
||||||
|
|
||||||
let for_all pred s =
|
let for_all pred s =
|
||||||
let len = String.length s in
|
try String.iter (fun c->if not (pred c) then raise Exit) s; true
|
||||||
let rec loop idx =
|
with Exit -> false
|
||||||
if idx = len then true
|
|
||||||
else if pred (String.unsafe_get s idx) then loop (idx + 1)
|
|
||||||
else false
|
|
||||||
in
|
|
||||||
loop 0
|
|
||||||
|
|
||||||
let parse_ ~buf (bs:byte_stream) : t =
|
let parse_ ~buf (bs:byte_stream) : t =
|
||||||
let rec loop acc =
|
let rec loop acc =
|
||||||
|
|
@ -354,10 +346,10 @@ let is_tchar = function
|
||||||
try
|
try
|
||||||
let i = String.index line ':' in
|
let i = String.index line ':' in
|
||||||
let k = String.sub line 0 i in
|
let k = String.sub line 0 i in
|
||||||
if for_all is_tchar k then (
|
if not (for_all is_tchar k) then (
|
||||||
let v = String.sub line (i+1) (String.length line-i-1) |> String.trim in
|
invalid_arg (Printf.sprintf "Invalid header key: %S" k));
|
||||||
k,v)
|
let v = String.sub line (i+1) (String.length line-i-1) |> String.trim in
|
||||||
else invalid_arg (Printf.sprintf "Invalid header key: %S" k)
|
k,v
|
||||||
with _ -> bad_reqf 400 "invalid header line: %S" line
|
with _ -> bad_reqf 400 "invalid header line: %S" line
|
||||||
in
|
in
|
||||||
loop ((String.lowercase_ascii k,v)::acc)
|
loop ((String.lowercase_ascii k,v)::acc)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue