Check bounds in set_option_value()
authorMarco Costalba <mcostalba@gmail.com>
Mon, 1 Feb 2010 13:06:59 +0000 (14:06 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 1 Feb 2010 13:17:37 +0000 (14:17 +0100)
Normally it's up to the GUI to check for option's limits,
but we could receive the new value directly from the user
by teminal window. So let's check the bounds anyway.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/ucioption.cpp

index dc1effa856f50c2d29de6c9dd3040913b68ee9f7..fe98457546ec1e39df58a38b066d77992d97b04a 100644 (file)
@@ -293,10 +293,28 @@ void set_option_value(const string& name, const string& value) {
   else if (v == "false")
       v = "0";
 
-  if (options.find(name) != options.end())
-      options[name].currentValue = v;
-  else
+  if (options.find(name) == options.end())
+  {
       std::cout << "No such option: " << name << std::endl;
+      return;
+  }
+
+  // Normally it's up to the GUI to check for option's limits,
+  // but we could receive the new value directly from the user
+  // by teminal window. So let's check the bounds anyway.
+  Option& opt = options[name];
+
+  if (opt.type == CHECK && v != "0" && v != "1")
+      return;
+
+  else if (opt.type == SPIN)
+  {
+      int val = atoi(v.c_str());
+      if (val < opt.minValue || val > opt.maxValue)
+          return;
+  }
+
+  opt.currentValue = v;
 }