summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol.cpp14
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp11
2 files changed, 21 insertions, 4 deletions
diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp
index 905bc0f586..97df3427b0 100644
--- a/src/widgets/widgets/qwidgetlinecontrol.cpp
+++ b/src/widgets/widgets/qwidgetlinecontrol.cpp
@@ -973,12 +973,20 @@ void QWidgetLineControl::parseInputMask(const QString &maskFields)
// calculate m_maxLength / m_maskData length
m_maxLength = 0;
QChar c = 0;
+ bool escaped = false;
for (int i=0; i<m_inputMask.length(); i++) {
c = m_inputMask.at(i);
- if (i > 0 && m_inputMask.at(i-1) == QLatin1Char('\\')) {
- m_maxLength++;
- continue;
+ if (escaped) {
+ ++m_maxLength;
+ escaped = false;
+ continue;
}
+
+ if (c == '\\') {
+ escaped = true;
+ continue;
+ }
+
if (c != QLatin1Char('\\') && c != QLatin1Char('!') &&
c != QLatin1Char('<') && c != QLatin1Char('>') &&
c != QLatin1Char('{') && c != QLatin1Char('}') &&
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index a0ba91ba4a..3f7fdd6f6f 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -3106,7 +3106,6 @@ void tst_QLineEdit::inputMaskAndValidator()
void tst_QLineEdit::maxLengthAndInputMask()
{
- // Really a test for #30447
QLineEdit *testWidget = ensureTestWidget();
QVERIFY(testWidget->inputMask().isNull());
testWidget->setMaxLength(10);
@@ -3114,6 +3113,16 @@ void tst_QLineEdit::maxLengthAndInputMask()
testWidget->setInputMask(QString());
QVERIFY(testWidget->inputMask().isNull());
QCOMPARE(testWidget->maxLength(), 10);
+
+ testWidget->setInputMask("XXXX");
+ QCOMPARE(testWidget->maxLength(), 4);
+
+ testWidget->setMaxLength(15);
+ QCOMPARE(testWidget->maxLength(), 4);
+
+ // 8 \ => raw string with 4 \ => input mask with 2 \ => maxLength = 2
+ testWidget->setInputMask("\\\\\\\\");
+ QCOMPARE(testWidget->maxLength(), 2);
}