From: Vincent van Ravesteijn Date: Mon, 9 Mar 2009 19:54:47 +0000 (+0000) Subject: Proper fix to avoid an infinite loop with Qt4.5. X-Git-Tag: 2.0.0~7084 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=8768fa725131772b72eaf790743473eb38191d1f;p=features.git Proper fix to avoid an infinite loop with Qt4.5. see: http://www.qtsoftware.com/developer/faqs/why-does-qstring-indexof-qregexp-cause-a-crash-or-hang-in-qt-4.5 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28746 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/qt4/GuiLog.cpp b/src/frontends/qt4/GuiLog.cpp index 2ddadc9226..466c75fa4c 100644 --- a/src/frontends/qt4/GuiLog.cpp +++ b/src/frontends/qt4/GuiLog.cpp @@ -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); } } diff --git a/src/frontends/qt4/LaTeXHighlighter.cpp b/src/frontends/qt4/LaTeXHighlighter.cpp index 00f8064af9..9a9e5459a4 100644 --- a/src/frontends/qt4/LaTeXHighlighter.cpp +++ b/src/frontends/qt4/LaTeXHighlighter.cpp @@ -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); } // 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); } }