diff --git a/CHANGELOG.md b/CHANGELOG.md index d1cebb7..fb03bd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- Handle numeric escapes, i.e. `"\x19Ethereum Signed Message:\n"`, and similar strings. ### Changed ### Removed diff --git a/src/aeso_scan.erl b/src/aeso_scan.erl index 6553dd5..8dc47d4 100644 --- a/src/aeso_scan.erl +++ b/src/aeso_scan.erl @@ -95,9 +95,11 @@ parse_char([$', C, $']) -> C. unescape(Str) -> unescape(Str, []). -%% TODO: numeric escapes unescape([$"], Acc) -> list_to_binary(lists:reverse(Acc)); +unescape([$\\, $x, D1, D2 | Chars ], Acc) -> + C = list_to_integer([D1, D2], 16), + unescape(Chars, [C | Acc]); unescape([$\\, Code | Chars], Acc) -> Ok = fun(C) -> unescape(Chars, [C | Acc]) end, case Code of diff --git a/test/contracts/basic_auth.aes b/test/contracts/basic_auth.aes index 94be85f..327f0f9 100644 --- a/test/contracts/basic_auth.aes +++ b/test/contracts/basic_auth.aes @@ -15,3 +15,5 @@ contract BasicAuth = entrypoint to_sign(h : hash, n : int) = Crypto.blake2b((h, n)) + entrypoint weird_string() : string = + "\x19Weird String\x42\nMore\n"