branch: change the use of QString::indexOf(RegExp) into RegExp::indexIn(QString) to avoid crashes and infinite loops with Qt4.5.

See:
http://www.lyx.org/trac/changeset/28746

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_6_X@28767 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Vincent van Ravesteijn 2009-03-14 10:39:27 +00:00
parent f86581d59d
commit 7238dc91e8
4 changed files with 21 additions and 17 deletions

View File

@ -267,6 +267,8 @@ What's new in version 1.6.2?
- Fix a crash when an unfinished macro is edited and deleted in math
mode (bug 5744).
- Fix the use of regular expressions to avoid crashes with Qt4.5.
- Ignore the master_buffer setting in Document>Settings if the current
document is no real child. This fixes a crash when using the outliner
in such files (bug 5653).

View File

@ -68,27 +68,27 @@ void LogHighlighter::highlightBlock(QString const & text)
{
// Info
QRegExp exprInfo("^(Document Class:|LaTeX Font Info:|File:|Package:|Language:|Underfull|Overfull|\\(|\\\\).*$");
int index = text.indexOf(exprInfo);
int index = exprInfo.indexIn(text);
while (index >= 0) {
int length = exprInfo.matchedLength();
setFormat(index, length, infoFormat);
index = text.indexOf(exprInfo, index + length);
index = exprInfo.indexIn(text, index + length);
}
// LaTeX Warning:
QRegExp exprWarning("^LaTeX Warning.*$");
index = text.indexOf(exprWarning);
index = exprWarning.indexIn(text);
while (index >= 0) {
int length = exprWarning.matchedLength();
setFormat(index, length, warningFormat);
index = text.indexOf(exprWarning, index + length);
index = exprWarning.indexIn(text, index + length);
}
// ! error
QRegExp exprError("^!.*$");
index = text.indexOf(exprError);
index = exprError.indexIn(text);
while (index >= 0) {
int length = exprError.matchedLength();
setFormat(index, length, errorFormat);
index = text.indexOf(exprError, index + length);
index = exprError.indexIn(text, index + length);
}
}

View File

@ -35,11 +35,11 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
{
// $ $
static const QRegExp exprMath("\\$[^\\$]*\\$");
int index = text.indexOf(exprMath);
int index = exprMath.indexIn(text);
while (index >= 0) {
int length = exprMath.matchedLength();
setFormat(index, length, mathFormat);
index = text.indexOf(exprMath, index + length);
index = exprMath.indexIn(text, index + length);
}
// [ ]
static const QRegExp exprStartDispMath("(\\\\\\[|"
@ -67,9 +67,9 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
// start search from 0 (for end disp math)
// otherwise, start search from 'begin disp math'
if (previousBlockState() != 1)
startIndex = text.indexOf(exprStartDispMath);
startIndex = exprStartDispMath.indexIn(text);
while (startIndex >= 0) {
int endIndex = text.indexOf(exprEndDispMath, startIndex);
int endIndex = exprEndDispMath.indexIn(text, startIndex);
int length;
if (endIndex == -1) {
setCurrentBlockState(1);
@ -78,15 +78,15 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
length = endIndex - startIndex + exprEndDispMath.matchedLength();
}
setFormat(startIndex, length, mathFormat);
startIndex = text.indexOf(exprStartDispMath, startIndex + length);
startIndex = exprStartDispMath.indexIn(text, startIndex + length);
}
// \whatever
static const QRegExp exprKeyword("\\\\[A-Za-z]+");
index = text.indexOf(exprKeyword);
index = exprKeyword.indexIn(text);
while (index >= 0) {
int length = exprKeyword.matchedLength();
setFormat(index, length, keywordFormat);
index = text.indexOf(exprKeyword, index + length);
index = exprKeyword.indexIn(text, index + length);
}
// %comment
// Treat a line as a comment starting at a percent sign
@ -95,23 +95,23 @@ void LaTeXHighlighter::highlightBlock(QString const & text)
// ** an even number of backslashes
// ** any character other than a backslash
QRegExp exprComment("(?:^|[^\\\\])(?:\\\\\\\\)*(%).*$");
text.indexOf(exprComment);
exprComment.indexIn(text);
index = exprComment.pos(1);
while (index >= 0) {
int const length = exprComment.matchedLength()
- (index - exprComment.pos(0));
setFormat(index, length, commentFormat);
text.indexOf(exprComment, index + length);
exprComment.indexIn(text, index + length);
index = exprComment.pos(1);
}
// <LyX Warning: ...>
QString lyxwarn = qt_("LyX Warning: ");
QRegExp exprWarning("<" + lyxwarn + "[^<]*>");
index = text.indexOf(exprWarning);
index = exprWarning.indexIn(text);
while (index >= 0) {
int length = exprWarning.matchedLength();
setFormat(index, length, warningFormat);
index = text.indexOf(exprWarning, index + length);
index = exprWarning.indexIn(text, index + length);
}
}

View File

@ -210,6 +210,8 @@ What's new
- Fix a crash when an unfinished macro is edited and deleted in math
mode (bug 5744).
- Fix the use of regular expressions to avoid crashes with Qt4.5.
- Ignore the master_buffer setting in Document>Settings if the current
document is no real child. This fixes a crash when using the outliner