summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/value_checker.ml16
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