diff options
author | chriseth <chris@ethereum.org> | 2016-11-29 22:14:10 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-29 22:14:10 +0800 |
commit | 071cbc4a9d78c3fad4136c88f0bb5919a19c28d7 (patch) | |
tree | 14e4e07c271bd2fc697e481a854a0b068a0fa85d | |
parent | dadb4818ba230de02061ffd31ed71a0dec154885 (diff) | |
parent | a9e92cb68601a19d5e0969e4f3336be612edc72e (diff) | |
download | dexon-solidity-071cbc4a9d78c3fad4136c88f0bb5919a19c28d7.tar.gz dexon-solidity-071cbc4a9d78c3fad4136c88f0bb5919a19c28d7.tar.zst dexon-solidity-071cbc4a9d78c3fad4136c88f0bb5919a19c28d7.zip |
Merge pull request #1446 from ethereum/utf8-validate
Improve UTF8 validate
-rw-r--r-- | libdevcore/UTF8.cpp | 2 | ||||
-rw-r--r-- | libdevcore/UTF8.h | 8 | ||||
-rw-r--r-- | libsolidity/ast/ASTJsonConverter.cpp | 3 | ||||
-rw-r--r-- | libsolidity/ast/Types.cpp | 5 |
4 files changed, 11 insertions, 7 deletions
diff --git a/libdevcore/UTF8.cpp b/libdevcore/UTF8.cpp index d742fe66..1c7ed17c 100644 --- a/libdevcore/UTF8.cpp +++ b/libdevcore/UTF8.cpp @@ -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(); bool valid = true; diff --git a/libdevcore/UTF8.h b/libdevcore/UTF8.h index 9bdc2b4f..753914e3 100644 --- a/libdevcore/UTF8.h +++ b/libdevcore/UTF8.h @@ -30,6 +30,12 @@ namespace dev /// Validate an input for UTF8 encoding /// @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); +} } diff --git a/libsolidity/ast/ASTJsonConverter.cpp b/libsolidity/ast/ASTJsonConverter.cpp index 030b32ba..f6b06be6 100644 --- a/libsolidity/ast/ASTJsonConverter.cpp +++ b/libsolidity/ast/ASTJsonConverter.cpp @@ -417,9 +417,8 @@ bool ASTJsonConverter::visit(ElementaryTypeNameExpression const& _node) bool ASTJsonConverter::visit(Literal const& _node) { char const* tokenString = Token::toString(_node.token()); - size_t invalidPos = 0; Json::Value value{_node.value()}; - if (!dev::validate(_node.value(), invalidPos)) + if (!dev::validateUTF8(_node.value())) value = Json::nullValue; Token::Value subdenomination = Token::Value(_node.subDenomination()); addJsonNode(_node, "Literal", { diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index b22f3c08..d9660bc0 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -896,7 +896,7 @@ std::string StringLiteralType::toString(bool) const { 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 \"" + m_value + "\""; @@ -909,8 +909,7 @@ TypePointer StringLiteralType::mobileType() const bool StringLiteralType::isValidUTF8() const { - size_t dontCare {}; - return dev::validate(m_value, dontCare); + return dev::validateUTF8(m_value); } shared_ptr<FixedBytesType> FixedBytesType::smallestTypeForLiteral(string const& _literal) |