[Development] Possible infinite loop in QString::toLocal8bit?

Welbourne Edward edward.welbourne at theqtcompany.com
Tue Apr 12 13:44:35 CEST 2016


Frédéric Marchal wrote:

> I was looking at how QString::toLocal8bit works and, on Windows, it
> looks like it may enter an infinite loop.
>
> If I got it right, QString::toLocal8Bit_helper calls
> QTextCodec::fromUnicode which, on Windows, calls
> QWindowsLocalCodec::convertFromUnicode in qwindowscodec.cpp.

Specifically, QWindowsLocalCodec::convertFromUnicode().

> In that function, if WideCharToMultiByte fails because the input
> string is not a valid unicode string, the function displays a qWarning
> where it helpfully output the offending string using
> QString::toLocal8bit!
>
> If the string cannot be converted in the first place, it won't be
> possible to convert it a second time to display the warning
> message. Hence the infinite loop.

Beautiful - well spotted.

> It looks to me like the string should be displayed using
> QString::toUtf8.

The qWarning's format string even claims it is in UTF-8.

> Am I right?

Yes, you are.

> Is it worth opening a QTBUG for this?

Doing so would help track the matter (I have a fix, but may struggle to
construct a test-case - if you have one, please do let me know, either
by e-mail or in the bug report), but is not crucial: I have a patch in
preparation, ready for review (but for a test-case),

https://codereview.qt-project.org/#/c/155517/

	Eddy.



More information about the Development mailing list