qt5base-lts/tests/auto
Giuseppe D'Angelo bcd1b7fe8e Fix QString::toUcs4 returning invalid data when encountering stray surrogates
Code units 0xD800 .. 0xDFFF are not UCS-4, so we can't happily return them.
Instead, if we encounter a stray surrogate, replace it with 0xFFFD, which
is what Unicode recommends anyhow.

References:

§3.9 Unicode Encoding Forms

    D76: Unicode scalar value: Any Unicode code point except high-surrogate
    and low surrogate code points.

    As a result of this definition, the set of Unicode scalar values consists
    of the ranges 0 to D7FF_16 and E000_16 to 10FFFF_16, inclusive.

    [...]

    UTF-32 encoding form: The Unicode encoding form that assigns each Unicode
    scalar value to a single unsigned 32-bit code unit with the same numeric
    value as the Unicode scalar value.

§ C.2 Encoding Forms in ISO/IEC 10646

    UCS-4. UCS-4 stands for “Universal Character Set coded in 4 octets.” It is
    now treated simply as a synonym for UTF-32, and is considered the canonical
    form for representation of characters in 10646.

§ 3.9 Unicode Encoding Forms (Best Practices for Using U+FFFD)
and
§ 5.22 Best Practice for U+FFFD Substitution

    Whenever an unconvertible offset is reached during conversion of a code
    unit sequence:

    1. The maximal subpart at that offset should be replaced by a single
    U+FFFD.

    2. The conversion should proceed at the offset immediately after the
    maximal subpart.

    [...]

    Whenever an unconvertible offset is reached during conversion of a code
    unit sequence to Unicode:

    1. Find the longest code unit sequence that is the initial subsequence of
    some sequence that could be converted. If there is such a sequence, replace
    it with a single U+FFFD; otherwise replace a single code unit with a single
    U+FFFD.

    2. The conversion should proceed at the offset immediately after the
    subsequence which has been replaced.

[ChangeLog][QtCore][QString] QString::toUcs4 now does not return invalid
UCS-4 code units belonging to the surrogate range (U+D800 to U+DFFF)
when the QString contains malformed UTF-16 data. Instead, U+FFFD
is returned in place of the malformed subsequence.

Change-Id: I19d7af03e749fea680fd5d9635439bc9d56558a9
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2014-02-07 15:00:36 +01:00
..
android Adding CI utilities to Android test script 2013-10-30 11:29:04 +01:00
bic/data test: Add 5.1.0 bic data for linux-gcc-ia32 2013-07-08 21:47:36 +02:00
cmake Teach CMake about Qt 5 plugins. 2013-09-10 14:38:18 +02:00
compilerwarnings/data Update copyright year in Digia's license headers 2013-01-18 09:07:35 +01:00
concurrent QtConcurrent: Workaround GCC bug 58800 in median calculation 2013-12-03 11:45:18 +01:00
corelib Fix QString::toUcs4 returning invalid data when encountering stray surrogates 2014-02-07 15:00:36 +01:00
dbus don't erroneously claim that gui support is needed 2013-10-16 17:10:15 +02:00
gui Support empty inline elements in block tags in QTextDocument 2014-02-05 09:10:25 +01:00
guiapplauncher Update the documentation after moving examples. 2011-07-05 21:19:08 +02:00
installed_cmake Add a unit test for testing Qt in its install location. 2013-07-02 23:08:54 +02:00
network Add more specific HTTP error codes to QNetworkReply::NetworkError 2014-01-30 07:56:47 +01:00
opengl Resurrect QGLWidget::renderPixmap() 2014-01-06 12:57:20 +01:00
other Cocoa: Allow frameless NSWindow child QWindows 2014-02-05 23:12:50 +01:00
printsupport QPrinter - Fix Printer Selection option on Windows 2014-02-05 19:34:03 +01:00
shared iOS: Fix compilation of some basic tests 2014-01-17 11:04:43 +01:00
sql Replace win32-g++ with mingw scope 2014-01-17 12:08:24 +01:00
testlib Testlib: Use QString for messages in QAbstractTestLogger::addMessage() 2014-01-21 06:28:23 +01:00
tools Fix lack of deterministic behavior in moc. 2014-01-22 08:27:50 +01:00
widgets Fix setWindowFlags() for QMdiSubWindow. 2014-02-01 15:50:26 +01:00
xml expand tabs and related whitespace fixes in *.{cpp,h,qdoc} 2014-01-13 22:46:50 +01:00
auto.pro iOS: Enable building of basic tests 2014-01-22 12:35:17 +01:00
network-settings.h network test settings: support newer FTP server versions 2013-08-28 12:45:34 +02:00
qtest-config.h Update copyright year in Digia's license headers 2013-01-18 09:07:35 +01:00
test.pl Whitespace cleanup: remove trailing whitespace 2013-03-16 20:22:50 +01:00