aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2016-11-29 22:14:10 +0800
committerGitHub <noreply@github.com>2016-11-29 22:14:10 +0800
commit071cbc4a9d78c3fad4136c88f0bb5919a19c28d7 (patch)
tree14e4e07c271bd2fc697e481a854a0b068a0fa85d
parentdadb4818ba230de02061ffd31ed71a0dec154885 (diff)
parenta9e92cb68601a19d5e0969e4f3336be612edc72e (diff)
downloaddexon-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.cpp2
-rw-r--r--libdevcore/UTF8.h8
-rw-r--r--libsolidity/ast/ASTJsonConverter.cpp3
-rw-r--r--libsolidity/ast/Types.cpp5
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)