From 2ba61518f4c2a4667368b5abb4c3e078a4e4df22 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 25 Jan 2012 00:10:44 +0000 Subject: [PATCH] Fix return value of wxMBConvUTF8::FromWChar(). Apply the same fix as was done in r68694 for ToWChar() to FromWChar(): it also returned an off by 1 value when not using MAP_INVALID_UTF8_NOT. Closes #13400. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70462 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/strconv.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/common/strconv.cpp b/src/common/strconv.cpp index f6dbc341f5..54df1ff70a 100644 --- a/src/common/strconv.cpp +++ b/src/common/strconv.cpp @@ -1395,7 +1395,10 @@ size_t wxMBConvUTF8::FromWChar(char *buf, size_t n, size_t len = 0; - while ((srcLen == wxNO_LEN ? *psz : srcLen--) && ((!buf) || (len < n))) + // The length can be either given explicitly or computed implicitly for the + // NUL-terminated strings. + const bool isNulTerminated = srcLen == wxNO_LEN; + while ((isNulTerminated ? *psz : srcLen--) && ((!buf) || (len < n))) { wxUint32 cc; @@ -1463,10 +1466,17 @@ size_t wxMBConvUTF8::FromWChar(char *buf, size_t n, } } - if (srcLen == wxNO_LEN && buf && (len < n)) - *buf = 0; + if ( isNulTerminated ) + { + // Add the trailing NUL in this case if we have a large enough buffer. + if ( buf && (len < n) ) + *buf = 0; + + // And count it in any case. + len++; + } - return len + 1; + return len; } // ============================================================================ -- 2.45.2