From 7a8e90dd7a6bff0e88308ae3d7ad9a8d10f20a67 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 30 Sep 2009 00:15:11 +0000 Subject: [PATCH] Correct checks for conversion success in wxUniChar. Correct the checks in wxUniChar::From/ToHi8bit() to check for conversion success correctly as it always failed otherwise: wxMBConv::To/FromWChar() conversion functions should return 2, not 1, when conversion of 2 characters succeeded, even if one of them is a NUL. Closes #11243. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62201 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/unichar.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/common/unichar.cpp b/src/common/unichar.cpp index 3684f76d62..e1cd0bf418 100644 --- a/src/common/unichar.cpp +++ b/src/common/unichar.cpp @@ -44,13 +44,16 @@ wxUniChar::value_type wxUniChar::FromHi8bit(char c) return wxT('?'); // FIXME-UTF8: what to use as failure character? #else - wchar_t buf[2]; - if ( wxConvLibc.ToWChar(buf, 2, &c, 1) != 2 ) + char cbuf[2]; + cbuf[0] = c; + cbuf[1] = '\0'; + wchar_t wbuf[2]; + if ( wxConvLibc.ToWChar(wbuf, 2, cbuf, 2) != 2 ) { wxFAIL_MSG( "invalid multibyte character" ); return wxT('?'); // FIXME-UTF8: what to use as failure character? } - return buf[0]; + return wbuf[0]; #endif } @@ -63,14 +66,16 @@ char wxUniChar::ToHi8bit(wxUniChar::value_type c) return '?'; // FIXME-UTF8: what to use as failure character? #else - wchar_t in = c; - char buf[2]; - if ( wxConvLibc.FromWChar(buf, 2, &in, 1) != 2 ) + wchar_t wbuf[2]; + wbuf[0] = c; + wbuf[1] = L'\0'; + char cbuf[2]; + if ( wxConvLibc.FromWChar(cbuf, 2, wbuf, 2) != 2 ) { wxFAIL_MSG( "character cannot be converted to single byte" ); return '?'; // FIXME-UTF8: what to use as failure character? } - return buf[0]; + return cbuf[0]; #endif } -- 2.45.2