aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/parser
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2012-12-18 14:54:16 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-07 16:06:56 +0100
commita65824f353300dedc8440c36a29d0fb6a2cb9662 (patch)
tree86a578d838e3b2e3a99c9ac8f867d83f709075e5 /src/qml/qml/parser
parent63064c7ed7a23c1749ed7f58d55b680190dc01c4 (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.cpp2
-rw-r--r--src/qml/qml/parser/qqmljslexer.cpp9
-rw-r--r--src/qml/qml/parser/qqmljslexer_p.h1
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,