Don't use the QRegExp methods that modify the object [Linguist]
authorThiago Macieira <thiago.macieira@intel.com>
Mon, 23 Apr 2012 15:47:03 +0000 (17:47 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 25 Apr 2012 16:09:46 +0000 (18:09 +0200)
QRegExp matching methods modify the object, which we don't want to. In
particular, when we receive a QRegExp from the user or we store in a
context that might require thread-safety, make sure we make a copy
before using it.

QRegularExpression has no such shortcoming.

Task-number: QTBUG-25064
Change-Id: I181d37fd98b00550dd98d418a33183a4bde0c532
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
src/linguist/shared/profileevaluator.cpp
src/linguist/shared/ts.cpp
src/linguist/shared/xliff.cpp

index 6abb4d3..75c7aef 100644 (file)
@@ -2544,7 +2544,7 @@ ProStringList ProFileEvaluator::Private::evaluateExpandFunction(
                 }
 
                 r.detach(); // Keep m_tmp out of QRegExp's cache
-                const QRegExp regex(r, Qt::CaseSensitive, QRegExp::Wildcard);
+                QRegExp regex(r, Qt::CaseSensitive, QRegExp::Wildcard);
                 for (int d = 0; d < dirs.count(); d++) {
                     QString dir = dirs[d];
                     QDir qdir(pfx + dir);
@@ -2566,7 +2566,7 @@ ProStringList ProFileEvaluator::Private::evaluateExpandFunction(
             if(args.count() != 3 ) {
                 evalError(fL1S("replace(var, before, after) requires three arguments"));
             } else {
-                const QRegExp before(args.at(1).toQString());
+                QRegExp before(args.at(1).toQString());
                 const QString &after(args.at(2).toQString(m_tmp2));
                 foreach (const ProString &val, values(map(args.at(0)))) {
                     QString rstr = val.toQString(m_tmp1);
index 1f3d7de..28fa148 100644 (file)
@@ -502,7 +502,7 @@ static QString evilBytes(const QString& str,
 }
 
 static void writeExtras(QTextStream &t, const char *indent,
-                        const TranslatorMessage::ExtraData &extras, const QRegExp &drops)
+                        const TranslatorMessage::ExtraData &extras, QRegExp drops)
 {
     for (Translator::ExtraData::ConstIterator it = extras.begin(); it != extras.end(); ++it) {
         if (!drops.exactMatch(it.key())) {
index c20c0fb..fdc96bf 100644 (file)
@@ -192,7 +192,7 @@ static QString protect(const QString &str, bool makePhs = true)
 
 
 static void writeExtras(QTextStream &ts, int indent,
-                        const TranslatorMessage::ExtraData &extras, const QRegExp &drops)
+                        const TranslatorMessage::ExtraData &extras, QRegExp drops)
 {
     for (Translator::ExtraData::ConstIterator it = extras.begin(); it != extras.end(); ++it) {
         if (!drops.exactMatch(it.key())) {