qt6-bb10/tests/auto
Chris Wilson 147aa29162 Fix sending UTC-offset QTimeZones through QDataStream
QTimeZone("UTC") should be valid, as "UTC" appears in the list of
availableTimeZoneIds(), and tst_QTimeZone::dataStreamTest() constructs
timezones like this, which are considered valid.

The internal representation of a QTimeZone("UTC") as created by
QTimeZone::QTimeZone(const QByteArray &ianaId) is a QUtcTimeZonePrivate
which isValid(), so the containing QTimeZone isValid() too.

When QTimeZone is serialized into a QDataStream, it calls
tz.d->serialize(ds) which is QUtcTimeZonePrivate::serialize. This
writes QStringLiteral("OffsetFromUtc") followed by the IANA ID and
the offset (etc.) to the datastream.

When QTimeZone is deserialized it looks for this marker string, and if
present, it passed all of the parameters to the QTimeZone constructor
(not just the name). However, that constructor does not support standard
IANA timezones (only custom ones), and when it detects that the supplied
IANA ID is actually listed in availableTimeZoneIds(), it leaves the
pointer to the QTimeZonePrivate uninitialized (NULL), which leaves
the QTimeZone invalid (isValid() returns false).

Thus, a valid timezone which was serialized and then deserialized has
become invalid. This also affects serialization of QDateTimes with
timezones.

Fixed by calling the name-only constructor first, which works (only) for
IANA standard timezones and leaves the QTimeZone invalid (isValid()
returns false) otherwise. In which case, we can call the many-argument
contructor to create a custom timezone with the same offset as the one
which was originally serialized.

[ChangeLog][QtCore][QTimeZone] Fixed sending IANA standard UTC-offset
QTimeZones through QDataStream, which previously came out invalid after
deserialization.

Task-number: QTBUG-60595
Change-Id: Id9c47e8bda701faae4d800e012afb6db545b2fe9
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2017-06-08 08:34:31 +00:00
..
android Updated license headers 2016-01-21 18:55:18 +00:00
bic/data Binary compatibility files for QtBase (5.8.0) 2017-02-14 12:42:20 +00:00
cmake tests: Unify license to GPL-EXCEPT 2017-04-03 07:18:46 +00:00
compilerwarnings/data Updated license headers 2016-01-21 18:55:18 +00:00
concurrent Adapt to the C++ SIC introduced by P0012: noexcept overloading 2017-02-17 13:57:30 +00:00
corelib Fix sending UTC-offset QTimeZones through QDataStream 2017-06-08 08:34:31 +00:00
dbus Add Q_FALLTHROUGH to QtDBus tests 2017-05-17 16:16:02 +00:00
gui winrt: Use styleHint as clue for fallbacks for font families 2017-06-01 08:23:51 +00:00
guiapplauncher
installed_cmake
network Continue to blacklist the utun interfaces on macOS 2017-06-06 22:53:04 +00:00
opengl Switch to RGB(A|X)8888[_Premultiplied] for QOpenGLFBO readbacks on GLES 2017-03-28 11:17:52 +00:00
other Do not always use argb32pm for subsurfaces 2017-05-31 18:53:57 +00:00
printsupport Convert features.printdialog to QT_[REQUIRE_]CONFIG 2017-05-30 17:21:26 +00:00
shared Make self-contained test of condensed font matching and width 2016-10-16 00:11:13 +00:00
sql Stabilize tst_QSqlThread::readWriteThreading 2017-05-18 21:18:02 +00:00
testlib Fix tst_Selftest on QEMU 2017-03-31 07:09:46 +00:00
tools moc: Don't error out when defining a keyword 2017-06-06 22:53:07 +00:00
widgets Fix crash when calling QWidget::grab() on a QOpenGLWidget 2017-06-07 14:49:13 +00:00
xml Merge remote-tracking branch 'origin/5.7' into 5.8 2016-11-01 06:02:55 +01:00
auto.pro Build examples and tests only if their requirements are met 2017-03-22 15:55:55 +00:00
network-settings.h Merge remote-tracking branch 'origin/5.6' into 5.7 2016-05-06 15:36:44 +02:00