diff options
-rw-r--r-- | src/value_checker.ml | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/value_checker.ml b/src/value_checker.ml index 3cd7123..1f123c0 100644 --- a/src/value_checker.ml +++ b/src/value_checker.ml @@ -17,16 +17,12 @@ let validate_value dir value_constraint value = *) let validator = F.concat dir v in let arg = BatOption.default "" c in - let danger = "[\",\\$,`]" in - let allowable = "'.*'" in - match Pcre.pmatch ~rex:(Pcre.regexp danger) validator with - |true -> false - |false -> - (match Pcre.pmatch ~rex:(Pcre.regexp danger) arg with - |false -> true - |true -> (try let _ = Pcre.exec ~pat:allowable arg in true - with Not_found -> false) - ) + let safe_arg = "'" ^ Pcre.qreplace ~pat:"\"" ~templ:"\\\"" arg ^ "'" in + let result = Unix.system (Printf.sprintf "%s %s %s" validator safe_arg value) in + match result with + | Unix.WEXITED 0 -> true + | Unix.WEXITED 127 -> raise (Bad_validator (Printf.sprintf "Could not execute validator %s" validator)) + | _ -> false (* If no constraints given, consider it valid. Otherwise consider it valid if it satisfies at least |