wxMBConvUTF8::ToWChar() was off by 1 when the input length was explicitly
specified, the extra NUL should only be added in the implicit length case.
This bug didn't occur for the default wxMBConvUTF8 object as it simply
forwarded to the base class wxMBConvStrictUTF8 implementation but it happened
when MAP_INVALID_UTF8_TO_OCTAL or MAP_INVALID_UTF8_TO_PUA was used.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68694
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- 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)))
{
const char *opsz = psz;
bool invalid = false;
{
const char *opsz = psz;
bool invalid = false;
- 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;
}
static inline bool isoctal(wchar_t wch)
}
static inline bool isoctal(wchar_t wch)