qt6-bb10/tests/auto
Edward Welbourne 2e9d33e534 Use correct index for QLocale::system()'s static
Nothing prevents client code from calling QLocale::setDefault() before
we ever instantiate QLocale::system() - aside from some quirks that
mean setDefault(), currently, does instantiate QLocale::system() to
force initialization of defaultLocalePrivate - so using defaultIndex()
could set the system QLocalePrivate instance's index incorrectly.

In any case, even if the index is initially set correctly, a
subsequent change to the system locale would change the correct index;
and nothing outside QLocale::system() has access to the instance that
would then be remembering an out-of-date index.

Actually tripping over that inconsistency took some deviousness, but
was possible. The index is (currently) only used for month name
lookups and those special-case, for the Roman-derived calendars, the
system locale, to only use the index if the system locale offers no
name for a month. Meanwhile, updateSystemPrivate() uses the fallback
locale's index for its look-up of which CLDR data to copy into the
fallback QLocaleData for the system locale.

None the less, a non-Roman calendar's lookup will go via the index to
get at the CLDR data for that calendar, thereby exposing the system
locale's index to use; and, sure enough, a setDefault() could lead
that to produce wrong answers.

In QLocale::system() there's a cached QLocalePrivate, whose index we
need to ensure stays in sync with the active system locale. So pass
its &m_index to systemData(), which will now (when passed this) ensure
it's up to date. Since we always have called systemData(), to ensure
it is up to date, we can skip that update in the initialization of the
cached private and use m_index = -1 to let systemData() know when it's
in the initial call, thereby making the static cache constinit.

Amended a test to what proved the issue was present.

Change-Id: I8d7ab5830cf0bbb9265c2af2a1edc9396ddef79f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-07-31 17:16:14 +02:00
..
bic/data Add binary compatibility file built against 6.5.0 2023-04-19 15:40:36 +00:00
cmake Fix handling of QT_PATH_ANDROID_ABI_xxxx in android multi-abi tests 2023-07-04 16:53:16 +02:00
concurrent CMake: Make qtbase tests standalone projects 2023-07-05 15:09:32 +02:00
corelib Use correct index for QLocale::system()'s static 2023-07-31 17:16:14 +02:00
dbus Fix spelling of D-Bus in the source code 2023-07-06 21:51:29 +02:00
gui Android: temporarily skip tst_qprinterinfo, tst_qwidget and tst_qwindow 2023-07-26 20:12:49 +03:00
guiapplauncher Move Weather Anchor Layout example to manual tests 2023-03-02 05:55:57 +01:00
network tst_QHostInfo: fix mem-leaks in threadSafetyAsynchronousAPI() 2023-07-19 04:52:28 +00:00
opengl tests: Remove remains of qmake conversion from CMakeLists.txt files 2023-02-17 21:56:49 +01:00
other a11y: Report app as parent for top-level item views 2023-07-10 11:34:41 +02:00
printsupport Android: temporarily skip tst_qprinterinfo, tst_qwidget and tst_qwindow 2023-07-26 20:12:49 +03:00
shared tests: remove PlatformInputContext::filterEvent() 2023-01-18 13:21:06 +01:00
sql SQL/PSQL: Handle jsonb operators in prepared queries 2023-07-23 16:49:15 +02:00
testlib tst_QAbstractItemModelTester: fix mem-leak 2023-07-18 12:13:30 +02:00
tools QObject: replace _q_reregisterTimers with a lambda 2023-07-31 01:52:25 +03:00
wasm CMake: Make qtbase tests standalone projects 2023-07-05 15:09:32 +02:00
widgets Android: temporarily skip tst_qprinterinfo, tst_qwidget and tst_qwindow 2023-07-26 20:12:49 +03:00
xml CMake: Make qtbase tests standalone projects 2023-07-05 15:09:32 +02:00
CMakeLists.txt CI: Enable tests under corelib/text for Wasm platform 2023-07-10 14:53:34 +02:00
network-settings.h Use SPDX license identifiers 2022-05-16 16:37:38 +02:00