diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp index cce32e7ad22..56381125460 100644 --- a/src/corelib/time/qdatetimeparser.cpp +++ b/src/corelib/time/qdatetimeparser.cpp @@ -2161,7 +2161,10 @@ bool QDateTimeParser::skipToNextSection(int index, const QDateTime ¤t, QSt if (node.type != TimeZoneSection || current.timeSpec() == Qt::OffsetFromUTC) { const QDateTime maximum = getMaximum(); const QDateTime minimum = getMinimum(); - Q_ASSERT(current >= minimum && current <= maximum); + // Range from minimum to maximum might not contain current if an earlier + // field's value was full-width but out of range. In such a case the + // parse is already headed for Invalid, so it doesn't matter that we get + // the wrong range of values for the current field here. QDateTime tmp = current; if (!setDigit(tmp, index, min) || tmp < minimum) diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp index f9c6afc795c..ce17a562354 100644 --- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp @@ -3271,6 +3271,8 @@ void tst_QDateTime::fromStringStringFormat_data() << u"2008-10-13 UTC+01:011.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900 << QDateTime(); QTest::newRow("invalid-time-spec:empty") << u"2001-09-15T09:33:01.001 "_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900 << QDateTime(); + QTest::newRow("invalid-month-year