Merge branch 'master' into chore/master-to-develop

This commit is contained in:
Aaron Blankstein
2022-07-18 14:57:06 -05:00
10 changed files with 2593 additions and 117 deletions

View File

@@ -170,6 +170,7 @@ pub enum CheckErrors {
// strings
InvalidCharactersDetected,
InvalidUTF8Encoding,
// secp256k1 signature
InvalidSecp65k1Signature,
@@ -405,6 +406,7 @@ impl DiagnosableError for CheckErrors {
CheckErrors::TraitReferenceNotAllowed => format!("trait references can not be stored"),
CheckErrors::ContractOfExpectsTrait => format!("trait reference expected"),
CheckErrors::InvalidCharactersDetected => format!("invalid characters detected"),
CheckErrors::InvalidUTF8Encoding => format!("invalid UTF8 encoding"),
CheckErrors::InvalidSecp65k1Signature => format!("invalid seckp256k1 signature"),
CheckErrors::TypeAlreadyAnnotatedFailure | CheckErrors::CheckerImplementationFailure => {
format!("internal error - please file an issue on github.com/blockstack/blockstack-core")

View File

@@ -786,8 +786,9 @@ impl Value {
let matched = captures.name("value").unwrap();
let scalar_value = window[matched.start()..matched.end()].to_string();
let unicode_char = {
let u = u32::from_str_radix(&scalar_value, 16).unwrap();
let c = char::from_u32(u).unwrap();
let u = u32::from_str_radix(&scalar_value, 16)
.map_err(|_| CheckErrors::InvalidUTF8Encoding)?;
let c = char::from_u32(u).ok_or_else(|| CheckErrors::InvalidUTF8Encoding)?;
let mut encoded_char: Vec<u8> = vec![0; c.len_utf8()];
c.encode_utf8(&mut encoded_char[..]);
encoded_char