diff --git a/libdevcore/CommonData.cpp b/libdevcore/CommonData.cpp index 1299939f5..b151ba604 100644 --- a/libdevcore/CommonData.cpp +++ b/libdevcore/CommonData.cpp @@ -179,14 +179,13 @@ bool dev::isValidDecimal(string const& _string) return true; } -// Returns a quoted string if all characters are printable ASCII chars, -// or its hex representation otherwise. -std::string dev::formatAsStringOrNumber(std::string const& _value) +string dev::formatAsStringOrNumber(string const& _value) { - if (_value.length() <= 32) - for (auto const& c: _value) - if (c <= 0x1f || c >= 0x7f || c == '"') - return "0x" + h256(_value, h256::AlignLeft).hex(); + assertThrow(_value.length() <= 32, StringTooLong, "String to be formatted longer than 32 bytes."); + + for (auto const& c: _value) + if (c <= 0x1f || c >= 0x7f || c == '"') + return "0x" + h256(_value, h256::AlignLeft).hex(); return "\"" + _value + "\""; } diff --git a/libdevcore/CommonData.h b/libdevcore/CommonData.h index 02b037ce8..9db1e3cf5 100644 --- a/libdevcore/CommonData.h +++ b/libdevcore/CommonData.h @@ -356,6 +356,7 @@ bool isValidDecimal(std::string const& _string); /// @returns a quoted string if all characters are printable ASCII chars, /// or its hex representation otherwise. +/// _value cannot be longer than 32 bytes. std::string formatAsStringOrNumber(std::string const& _value); template diff --git a/libdevcore/Exceptions.h b/libdevcore/Exceptions.h index df7a9ba01..851be4ea1 100644 --- a/libdevcore/Exceptions.h +++ b/libdevcore/Exceptions.h @@ -49,6 +49,7 @@ DEV_SIMPLE_EXCEPTION(BadHexCharacter); DEV_SIMPLE_EXCEPTION(BadHexCase); DEV_SIMPLE_EXCEPTION(FileError); DEV_SIMPLE_EXCEPTION(DataTooLong); +DEV_SIMPLE_EXCEPTION(StringTooLong); // error information to be added to exceptions using errinfo_comment = boost::error_info;