Merge pull request #1446 from ethereum/utf8-validate

Improve UTF8 validate
This commit is contained in:
chriseth 2016-11-29 15:14:10 +01:00 committed by GitHub
commit 071cbc4a9d
4 changed files with 11 additions and 7 deletions

View File

@ -28,7 +28,7 @@ namespace dev
{ {
bool validate(std::string const& _input, size_t& _invalidPosition) bool validateUTF8(std::string const& _input, size_t& _invalidPosition)
{ {
const size_t length = _input.length(); const size_t length = _input.length();
bool valid = true; bool valid = true;

View File

@ -30,6 +30,12 @@ namespace dev
/// Validate an input for UTF8 encoding /// Validate an input for UTF8 encoding
/// @returns false if it is invalid and the first invalid position in invalidPosition /// @returns false if it is invalid and the first invalid position in invalidPosition
bool validate(std::string const& _input, size_t& _invalidPosition); bool validateUTF8(std::string const& _input, size_t& _invalidPosition);
inline bool validateUTF8(std::string const& _input)
{
size_t invalidPos;
return validateUTF8(_input, invalidPos);
}
} }

View File

@ -417,9 +417,8 @@ bool ASTJsonConverter::visit(ElementaryTypeNameExpression const& _node)
bool ASTJsonConverter::visit(Literal const& _node) bool ASTJsonConverter::visit(Literal const& _node)
{ {
char const* tokenString = Token::toString(_node.token()); char const* tokenString = Token::toString(_node.token());
size_t invalidPos = 0;
Json::Value value{_node.value()}; Json::Value value{_node.value()};
if (!dev::validate(_node.value(), invalidPos)) if (!dev::validateUTF8(_node.value()))
value = Json::nullValue; value = Json::nullValue;
Token::Value subdenomination = Token::Value(_node.subDenomination()); Token::Value subdenomination = Token::Value(_node.subDenomination());
addJsonNode(_node, "Literal", { addJsonNode(_node, "Literal", {

View File

@ -896,7 +896,7 @@ std::string StringLiteralType::toString(bool) const
{ {
size_t invalidSequence; size_t invalidSequence;
if (!dev::validate(m_value, invalidSequence)) if (!dev::validateUTF8(m_value, invalidSequence))
return "literal_string (contains invalid UTF-8 sequence at position " + dev::toString(invalidSequence) + ")"; return "literal_string (contains invalid UTF-8 sequence at position " + dev::toString(invalidSequence) + ")";
return "literal_string \"" + m_value + "\""; return "literal_string \"" + m_value + "\"";
@ -909,8 +909,7 @@ TypePointer StringLiteralType::mobileType() const
bool StringLiteralType::isValidUTF8() const bool StringLiteralType::isValidUTF8() const
{ {
size_t dontCare {}; return dev::validateUTF8(m_value);
return dev::validate(m_value, dontCare);
} }
shared_ptr<FixedBytesType> FixedBytesType::smallestTypeForLiteral(string const& _literal) shared_ptr<FixedBytesType> FixedBytesType::smallestTypeForLiteral(string const& _literal)