qt5base-lts/tests/auto/corelib/io/qsettings
Tor Arne Vestbø 4cb614c7ab Apple OS: Handle QSetting strings with embedded zero-bytes
Saving strings with embedded zero-bytes (\0) as CFStrings would
sometimes fail, and only write the part of the string leading
up to the first zero-byte, instead of all the way to the final
zero-terminator. This bug was revealed by the code-path that
falls back to storing e.g. QTime as strings, via the helper
method QSettingsPrivate::variantToString().

We now use the same approach as on platforms such as Windows
and WinRT, where the string produced by variantToString() is
checked for null-bytes, and if so, stored using a binary
representation instead of as a string. For our case that
means we fall back to CFData when detecting the null-byte.

To separate strings from regular byte arrays, new logic has
been added to variantToString() that wraps the null-byte
strings in @String(). That way we can implement a fast-path
when converting back from CFData, that doesn't go via the
slow and lossy conversion via UTF8, and the resulting QVariant
will be of type QVariant::ByteArray. The reason for using
UTF-8 as the binary representation of the string is that
in the case of storing a QByteArray("@foo") we need to
still be able to convert it back to the same byte array,
which doesn't work if the on-disk format is UTF-16.

Task-number: QTBUG-56124
Change-Id: Iab2f71cf96cf3225de48dc5e71870d74b6dde1e8
Cherry-picked: 764f5bf48c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-10-18 14:35:08 +00:00
..
.gitattributes Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
.gitignore Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
BLACKLIST Extend blacklisting of tst_qsettings to OSX 10.11 2015-12-15 09:45:51 +00:00
bom.ini Properly detect UTF-8 BOM markers in ini files 2014-10-29 08:58:31 +01:00
qsettings.pro Set the Qt API level to compatibility mode in all tests. 2012-08-01 15:37:46 +02:00
qsettings.qrc Properly detect UTF-8 BOM markers in ini files 2014-10-29 08:58:31 +01:00
resourcefile2.ini Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
resourcefile3.ini Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
resourcefile4.ini Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
resourcefile5.ini Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
resourcefile.ini Moving relevant tests to corelib/io 2011-08-31 10:08:38 +02:00
tst_qsettings.cpp Apple OS: Handle QSetting strings with embedded zero-bytes 2016-10-18 14:35:08 +00:00