Skip to content
Snippets Groups Projects
Commit d29ffa3a authored by Valentin Perrelle's avatar Valentin Perrelle
Browse files

[server] check fields declaration for name validity

parent 8d394a0c
No related branches found
No related tags found
No related merge requests found
...@@ -332,9 +332,18 @@ struct ...@@ -332,9 +332,18 @@ struct
if s.published then if s.published then
raise (Invalid_argument "Server.Data.Record: already published") raise (Invalid_argument "Server.Data.Record: already published")
let is_valid_field_name s name =
if List.exists (fun f -> String.equal f.Package.fd_name name) s.fields then
raise (Invalid_argument ("Server.Data.Record: a field with name '" ^ name
^ "' already exists")) ;
if not (Str.string_match (Str.regexp "[a-zA-Z0-9 _-]+$") name 0) then
raise (Invalid_argument ("Server.Data.Record: field names must not be \
exotic ('" ^ name ^ "')"))
let field (type a r) (s : r signature) let field (type a r) (s : r signature)
~name ~descr ?default (d : a data) : (r,a) field = ~name ~descr ?default (d : a data) : (r,a) field =
not_published s ; not_published s ;
is_valid_field_name s name ;
let module D = (val d) in let module D = (val d) in
begin match default with begin match default with
| None -> () | None -> ()
...@@ -354,6 +363,7 @@ struct ...@@ -354,6 +363,7 @@ struct
let option (type a r) (s : r signature) let option (type a r) (s : r signature)
~name ~descr (d : a data) : (r,a option) field = ~name ~descr (d : a data) : (r,a option) field =
not_published s ; not_published s ;
is_valid_field_name s name ;
let module D = (val d) in let module D = (val d) in
let field = Package.{ let field = Package.{
fd_name = name ; fd_name = name ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment