From 84535483f9ba768c72196fccf2e9ac2c1ee9d0dd Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Mon, 22 Jan 2018 18:42:01 -0500 Subject: [PATCH] Check for additional invalid string-to-double conversions --- src/base/stringUtils.cpp | 10 ++++++++++ test/general/string_processing.cpp | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/base/stringUtils.cpp b/src/base/stringUtils.cpp index 6d4bd166c..39875b682 100644 --- a/src/base/stringUtils.cpp +++ b/src/base/stringUtils.cpp @@ -147,6 +147,9 @@ doublereal fpValueCheck(const std::string& val) int istart = 0; ch = str[0]; if (ch == '+' || ch == '-') { + if (str.size() == 1) { + throw CanteraError("fpValueCheck", "string ends in '{}'", ch); + } istart = 1; } for (size_t i = istart; i < str.size(); i++) { @@ -168,9 +171,16 @@ doublereal fpValueCheck(const std::string& val) if (numExp > 1) { throw CanteraError("fpValueCheck", "string has more than one exp char"); + } else if (i == str.size() - 1) { + throw CanteraError("fpValueCheck", + "string ends in '{}'", ch); } ch = str[i+1]; if (ch == '+' || ch == '-') { + if (i + 1 == str.size() - 1) { + throw CanteraError("fpValueCheck", + "string ends in '{}'", ch); + } i++; } } else { diff --git a/test/general/string_processing.cpp b/test/general/string_processing.cpp index ebf1eb02c..b49eefe49 100644 --- a/test/general/string_processing.cpp +++ b/test/general/string_processing.cpp @@ -81,6 +81,24 @@ TEST(parseCompString, not_a_number) CanteraError); } +TEST(parseCompString, not_a_number2) +{ + ASSERT_THROW(parseCompString("foo:1.0 bar:1e- baz:1e-4"), + CanteraError); +} + +TEST(parseCompString, not_a_number3) +{ + ASSERT_THROW(parseCompString("foo:1.0 bar:1.2e baz:1e-4"), + CanteraError); +} + +TEST(parseCompString, not_a_number4) +{ + ASSERT_THROW(parseCompString("foo:1.0 bar:+ baz:1e-4"), + CanteraError); +} + TEST(parseCompString, missing_value) { ASSERT_THROW(parseCompString("foo:1.0 bar: baz:1e-4"),