aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2012-12-11 21:09:47 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-12-11 14:50:32 +0100
commite0f21c696a1f960d0e55f33eed9d1dc37d8edae0 (patch)
treeb02c123deccaba9121ed0e307de25115dead101b
parent8bd89ac26344c1a617dcfd4730f93559ad48e9d4 (diff)
Don't assume QChar::null() is the end of input
The lexer currently assumes a null QChar implies the end of our input stream. Change it to take the full string into account. null QChar's inside comments or strings are now accepted, everywhere else they will cause a parse error. Change-Id: I60c40a32d5afe94c6c56d8a8092fc32726b98420 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
-rw-r--r--src/qml/qml/parser/qqmljslexer.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/qml/qml/parser/qqmljslexer.cpp b/src/qml/qml/parser/qqmljslexer.cpp
index 158640c47e..c3ddd0a9e8 100644
--- a/src/qml/qml/parser/qqmljslexer.cpp
+++ b/src/qml/qml/parser/qqmljslexer.cpp
@@ -364,7 +364,7 @@ again:
_tokenStartPtr = _codePtr - 1;
_tokenLine = _currentLineNumber;
- if (_char.isNull())
+ if (_codePtr > _endPtr)
return EOF_SYMBOL;
const QChar ch = _char;
@@ -609,7 +609,7 @@ again:
const QChar *startCode = _codePtr;
if (_engine) {
- while (!_char.isNull()) {
+ while (_codePtr <= _endPtr) {
if (isLineTerminator()) {
if (qmlMode())
break;
@@ -634,7 +634,7 @@ again:
while (startCode != _codePtr - 1)
_tokenText += *startCode++;
- while (! _char.isNull()) {
+ while (_codePtr <= _endPtr) {
if (unsigned sequenceLength = isLineTerminatorSequence()) {
multilineStringLiteral = true;
_tokenText += _char;
@@ -984,7 +984,7 @@ bool Lexer::scanRegExp(RegExpBodyPrefix prefix)
_tokenText += _char;
scanChar();
- if (_char.isNull() || isLineTerminator()) {
+ if (_codePtr > _endPtr || isLineTerminator()) {
_errorMessage = QCoreApplication::translate("QQmlParser", "Unterminated regular expression backslash sequence");
return false;
}
@@ -998,7 +998,7 @@ bool Lexer::scanRegExp(RegExpBodyPrefix prefix)
_tokenText += _char;
scanChar();
- while (! _char.isNull() && ! isLineTerminator()) {
+ while (_codePtr <= _endPtr && ! isLineTerminator()) {
if (_char == QLatin1Char(']'))
break;
else if (_char == QLatin1Char('\\')) {
@@ -1006,7 +1006,7 @@ bool Lexer::scanRegExp(RegExpBodyPrefix prefix)
_tokenText += _char;
scanChar();
- if (_char.isNull() || isLineTerminator()) {
+ if (_codePtr > _endPtr || isLineTerminator()) {
_errorMessage = QCoreApplication::translate("QQmlParser", "Unterminated regular expression backslash sequence");
return false;
}
@@ -1029,7 +1029,7 @@ bool Lexer::scanRegExp(RegExpBodyPrefix prefix)
break;
default:
- if (_char.isNull() || isLineTerminator()) {
+ if (_codePtr > _endPtr || isLineTerminator()) {
_errorMessage = QCoreApplication::translate("QQmlParser", "Unterminated regular expression literal");
return false;
} else {