summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-07-23 23:20:37 +0100
committerDamien George <damien.p.george@gmail.com>2015-07-23 23:20:37 +0100
commitd241c2a5926c0c8147a05b10ad3e7a54d480f55b (patch)
treede0d314182a0b2bc124c8546367ebfe7ae40241c
parentf17e663493c80e2b9b9dbc8b6340c9239efc92a0 (diff)
downloadmicropython-d241c2a5926c0c8147a05b10ad3e7a54d480f55b.tar.gz
micropython-d241c2a5926c0c8147a05b10ad3e7a54d480f55b.zip
py/lexer: Raise SyntaxError when str hex escape sequence is malformed.
Addresses issue #1390.
-rw-r--r--py/lexer.c4
-rw-r--r--tests/basics/lexer.py18
2 files changed, 20 insertions, 2 deletions
diff --git a/py/lexer.c b/py/lexer.c
index 3e7d589f61..17d711696b 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -454,8 +454,8 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, bool first_token) {
{
mp_uint_t num = 0;
if (!get_hex(lex, (c == 'x' ? 2 : c == 'u' ? 4 : 8), &num)) {
- // TODO error message
- assert(0);
+ // not enough hex chars for escape sequence
+ lex->tok_kind = MP_TOKEN_INVALID;
}
c = num;
break;
diff --git a/tests/basics/lexer.py b/tests/basics/lexer.py
index 1057c3961b..70a9cce993 100644
--- a/tests/basics/lexer.py
+++ b/tests/basics/lexer.py
@@ -38,3 +38,21 @@ def a(x):
if x:
print(x)
a(1)
+
+# badly formed hex escape sequences
+try:
+ exec(r"'\x0'")
+except SyntaxError:
+ print("SyntaxError")
+try:
+ exec(r"b'\x0'")
+except SyntaxError:
+ print("SyntaxError")
+try:
+ exec(r"'\u000'")
+except SyntaxError:
+ print("SyntaxError")
+try:
+ exec(r"'\U0000000'")
+except SyntaxError:
+ print("SyntaxError")