diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp index ead40f923e7..c9d4d551832 100644 --- a/src/corelib/time/qtimezoneprivate_tz.cpp +++ b/src/corelib/time/qtimezoneprivate_tz.cpp @@ -514,7 +514,7 @@ static inline bool asciiIsLetter(char ch) namespace { -struct PosixZone +struct PosixZone // TODO: QTBUG-112006 - make this cross-platform. { enum { InvalidOffset = INT_MIN, @@ -600,7 +600,7 @@ static auto validatePosixRule(const QByteArray &posixRule, bool requireOffset = // See also calculatePosixTransition()'s reference. const auto parts = posixRule.split(','); const struct { bool isValid, hasDst; } fail{false, false}, good{true, parts.size() > 1}; - const QByteArray &zoneinfo = parts.at(0); + const QByteArray &zoneinfo = parts.at(0).trimmed(); if (zoneinfo.isEmpty()) return fail; @@ -656,7 +656,7 @@ static QList calculatePosixTransitions(const QByteArray PosixZone stdZone, dstZone; { - const QByteArray &zoneinfo = parts.at(0); + const QByteArray &zoneinfo = parts.at(0).trimmed(); const char *begin = zoneinfo.constBegin(); stdZone = PosixZone::parse(begin, zoneinfo.constEnd()); diff --git a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp index ec527c4d311..a1caee1de9f 100644 --- a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp +++ b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp @@ -1468,6 +1468,11 @@ void tst_QTimeZone::tzTest() QVERIFY(tzposix.isValid()); QVERIFY(tzposix.hasDaylightTime()); + // Cope with stray space at start of value (QTBUG-135109): + QTimeZone syd(" AEST-10AEDT,M10.1.0,M4.1.0/3"); + QVERIFY(syd.isValid()); + QVERIFY(syd.hasDaylightTime()); + // RHEL has been seen with this as Africa/Casablanca's POSIX rule: QTzTimeZonePrivate permaDst("<+00>0<+01>,0/0,J365/25"); const QTimeZone utcP1("UTC+01:00"); // Should always have same offset as permaDst