From 7209265254c4fea0974a1ba08ca07aacd0e94277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 11 Dec 2019 16:37:46 +0100 Subject: [PATCH] [poincare] Parser: forbid parsing 0xABCF as 0xABC*F --- poincare/src/parsing/parser.cpp | 7 +++++-- poincare/test/parsing.cpp | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/poincare/src/parsing/parser.cpp b/poincare/src/parsing/parser.cpp index c98e5ba2b..961f16d5d 100644 --- a/poincare/src/parsing/parser.cpp +++ b/poincare/src/parsing/parser.cpp @@ -154,8 +154,11 @@ void Parser::parseNumber(Expression & leftHandSide, Token::Type stoppingType) { return; } leftHandSide = m_currentToken.expression(); - if (m_nextToken.isNumber()) { - m_status = Status::Error; // No implicit multiplication between two numbers + // No implicit multiplication between two numbers + if (m_nextToken.isNumber() + // No implicit multiplication between a hexadecimal number and an identifer (avoid parsing 0x2abch as 0x2ABC*h) + || (m_currentToken.is(Token::Type::HexadecimalNumber) && m_nextToken.is(Token::Type::Identifier))) { + m_status = Status::Error; return; } isThereImplicitMultiplication(); diff --git a/poincare/test/parsing.cpp b/poincare/test/parsing.cpp index cf707ea11..e7c9c02ec 100644 --- a/poincare/test/parsing.cpp +++ b/poincare/test/parsing.cpp @@ -238,7 +238,7 @@ QUIZ_CASE(poincare_parsing_parse) { assert_text_not_parsable("0=0→x"); assert_text_not_parsable("1ᴇ2ᴇ3"); assert_text_not_parsable("0b001112"); - //assert_text_not_parsable("0x123G"); + assert_text_not_parsable("0x123G"); } Matrix BuildMatrix(int rows, int columns, Expression entries[]) {