diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index 31f6c17179..cd76ebe7c3 100644 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -138,12 +139,24 @@ static void set_do_exit(int sig) { template static int read_param(T* param, const char *param_name, bool persistent_param = false){ - char *s; - int result = read_db_value(param_name, &s, NULL, persistent_param); + T param_orig = *param; + char *value; + size_t sz; + + int result = read_db_value(param_name, &value, &sz, persistent_param); if (result == 0){ + std::string s = std::string(value, sz); // value is not null terminated + free(value); + + // Parse result std::istringstream iss(s); iss >> *param; - free(s); + + // Restore original value if parsing failed + if (iss.fail()) { + *param = param_orig; + result = -1; + } } return result; }