diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2012-12-18 14:54:16 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-07 16:06:56 +0100 |
commit | a65824f353300dedc8440c36a29d0fb6a2cb9662 (patch) | |
tree | 86a578d838e3b2e3a99c9ac8f867d83f709075e5 /src/qml/qml/parser | |
parent | 63064c7ed7a23c1749ed7f58d55b680190dc01c4 (diff) |
Fix: disallow incomplete hex numbers "0x" and "0X".
See also ECMA 5.1, 7.8.3, rule HexIntegerLiteral.
Change-Id: I356dc7cfbc88890bb7f35c8bc4219a37633177f8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/parser')
-rw-r--r-- | src/qml/qml/parser/qqmljsengine_p.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/parser/qqmljslexer.cpp | 9 | ||||
-rw-r--r-- | src/qml/qml/parser/qqmljslexer_p.h | 1 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/qml/qml/parser/qqmljsengine_p.cpp b/src/qml/qml/parser/qqmljsengine_p.cpp index aab5035134..5adcec2060 100644 --- a/src/qml/qml/parser/qqmljsengine_p.cpp +++ b/src/qml/qml/parser/qqmljsengine_p.cpp @@ -50,7 +50,7 @@ QT_QML_BEGIN_NAMESPACE namespace QQmlJS { -static int toDigit(char c) +static inline int toDigit(char c) { if ((c >= '0') && (c <= '9')) return c - '0'; diff --git a/src/qml/qml/parser/qqmljslexer.cpp b/src/qml/qml/parser/qqmljslexer.cpp index 79fb971dde..508d7581be 100644 --- a/src/qml/qml/parser/qqmljslexer.cpp +++ b/src/qml/qml/parser/qqmljslexer.cpp @@ -861,8 +861,9 @@ int Lexer::scanNumber(QChar ch) chars.append(ch.unicode()); if (ch == QLatin1Char('0') && (_char == QLatin1Char('x') || _char == QLatin1Char('X'))) { - // parse hex integer literal + ch = _char; // remember the x or X to use it in the error message below. + // parse hex integer literal chars.append(_char.unicode()); scanChar(); // consume `x' @@ -871,6 +872,12 @@ int Lexer::scanNumber(QChar ch) scanChar(); } + if (chars.size() < 3) { + _errorCode = IllegalHexNumber; + _errorMessage = QCoreApplication::translate("QQmlParser", "At least one hexadecimal digit is required after '0%1'").arg(ch); + return T_ERROR; + } + _tokenValue = integerFromString(chars.constData(), chars.size(), 16); return T_NUMERIC_LITERAL; } diff --git a/src/qml/qml/parser/qqmljslexer_p.h b/src/qml/qml/parser/qqmljslexer_p.h index e8ffbd3e70..708bb43e93 100644 --- a/src/qml/qml/parser/qqmljslexer_p.h +++ b/src/qml/qml/parser/qqmljslexer_p.h @@ -121,6 +121,7 @@ public: enum Error { NoError, IllegalCharacter, + IllegalHexNumber, UnclosedStringLiteral, IllegalEscapeSequence, IllegalUnicodeEscapeSequence, |