SDC: Add period and waveform format error checks Signed-off-by: Tomasz Michalak <tmichalak@antmicro.com>
diff --git a/sdc-plugin/clocks.cc b/sdc-plugin/clocks.cc index 5ac2819..cd2b5f2 100644 --- a/sdc-plugin/clocks.cc +++ b/sdc-plugin/clocks.cc
@@ -54,8 +54,13 @@ "Period has not been specified\n Default value 0 will be used\n"); return 0; } - return std::stof( - clock_wire->get_string_attribute(RTLIL::escape_id("PERIOD"))); + float period(0); + try { + period = std::stof(clock_wire->get_string_attribute(RTLIL::escape_id("PERIOD"))); + } catch (const std::invalid_argument& e) { + log_cmd_error("Incorrect PERIOD format\n"); + } + return period; } std::pair<float, float> Clock::Waveform(RTLIL::Wire* clock_wire) { @@ -78,7 +83,9 @@ float falling_edge(0); std::string waveform( clock_wire->get_string_attribute(RTLIL::escape_id("WAVEFORM"))); - std::sscanf(waveform.c_str(), "%f %f", &rising_edge, &falling_edge); + if (std::sscanf(waveform.c_str(), "%f %f", &rising_edge, &falling_edge) != 2) { + log_cmd_error("Incorrect WAVEFORM format\n"); + } return std::make_pair(rising_edge, falling_edge); }