Fix provided by upstream gsmartcontrol.sf.net, in HomePage > News > 2015-04-29: The Linux binary packages have been updated with a patch that fixes crash on startup for some smartmontools version and system configuration combinations. The source patch can be downloaded separately as well. Note that he fix has been included in the SVN version for some time now. direct link for this patch: fix https://build.opensuse.org/source/home:alex_sh/gsmartcontrol/gsmartcontrol_parser_crash_fix.diff?rev=da33e1d56b052b483f576e5e6823da3b Index: src/applib/smartctl_parser.cpp =================================================================== --- src/applib/smartctl_parser.cpp (revision 106) +++ src/applib/smartctl_parser.cpp (revision 107) @@ -201,21 +201,20 @@ while (section_start_pos != std::string::npos && (section_start_pos = s.find("===", section_start_pos)) != std::string::npos) { - tmp_pos = s.find("\n", section_start_pos); // works with \r\n too. + tmp_pos = s.find("\n", section_start_pos); // works with \r\n too. This may be npos if nothing follows the header. // trim is needed to remove potential \r in the end std::string section_header = hz::string_trim_copy(s.substr(section_start_pos, (tmp_pos == std::string::npos ? tmp_pos : (tmp_pos - section_start_pos)) )); - if (tmp_pos != std::string::npos) - ++tmp_pos; // set to start of the next section - - section_end_pos = s.find("===", tmp_pos); // start of the next section - std::string section_body_str = hz::string_trim_copy(s.substr(tmp_pos, - (section_end_pos == std::string::npos ? section_end_pos : section_end_pos - tmp_pos))); - + std::string section_body_str; + if (tmp_pos != std::string::npos) { + section_end_pos = s.find("===", tmp_pos); // start of the next section + section_body_str = hz::string_trim_copy(s.substr(tmp_pos, + (section_end_pos == std::string::npos ? section_end_pos : section_end_pos - tmp_pos))); + } status = parse_section(section_header, section_body_str) || status; - section_start_pos = section_end_pos; + section_start_pos = (tmp_pos == std::string::npos ? std::string::npos : section_end_pos); } if (!status) {