From 8eb2546bf23419e20064f4cf5c308e77831b3ee5 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 19 Jan 2012 17:32:41 +0100 Subject: [PATCH] Fix a couple of edge cases for WildcardUnix matching Fix a couple of cases where WildcardUnix was not matching when the string was just [] or ended with a \. The testWildcardEscaping() test has been extended to account for these two cases too. Integrate 7ce3726aea4be2dfdb57966a4482f66fec6f8f57 from 4.8 Task-number: QTBUG-20897 Change-Id: I7a07ac008473fa7a080db752e189f6404842603f Reviewed-by: Thiago Macieira --- src/corelib/tools/qregexp.cpp | 2 +- tests/auto/corelib/tools/qregexp/tst_qregexp.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index a2c8dce23c..4b1e1b44e2 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -773,7 +773,7 @@ static QString wc2rx(const QString &wc_str, const bool enableEscaping) if (isEscaping) { rx += QLatin1String("\\\\"); } // we insert the \\ later if necessary - if (i+1 == wclen) { // the end + if (i == wclen) { // the end rx += QLatin1String("\\\\"); } } else { diff --git a/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp b/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp index 239b930a42..b07d435405 100644 --- a/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp +++ b/tests/auto/corelib/tools/qregexp/tst_qregexp.cpp @@ -829,6 +829,8 @@ void tst_QRegExp::testEscapingWildcard_data(){ QTest::newRow("? Escaped") << "\\?O;" << "?O;" << true; QTest::newRow("[] not escaped") << "[lL]" << "l" << true; + QTest::newRow("[] escaped") << "\\[\\]" << "[]" << true; + QTest::newRow("case [[]") << "[[abc]" << "[" << true; QTest::newRow("case []abc] match ]") << "[]abc]" << "]" << true; QTest::newRow("case []abc] match a") << "[]abc]" << "a" << true; @@ -844,7 +846,7 @@ void tst_QRegExp::testEscapingWildcard_data(){ QTest::newRow("a true '\\' in input") << "\\Qt;" << "\\Qt;" << true; QTest::newRow("two true '\\' in input") << "\\\\Qt;" << "\\\\Qt;" << true; - QTest::newRow("a '\\' at the end") << "\\\\Qt;" << "\\\\Qt;" << true; + QTest::newRow("a '\\' at the end") << "\\\\Qt;\\" << "\\\\Qt;\\" << true; } void tst_QRegExp::testEscapingWildcard(){