From: Václav Slavík Date: Sun, 18 Aug 2002 17:23:08 +0000 (+0000) Subject: don't crash if used in iconv-like fashion X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/49dd9820ac43a4dbc3e4987148654f17dee6dee9?ds=inline don't crash if used in iconv-like fashion git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16588 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/strconv.cpp b/src/common/strconv.cpp index a7db44b730..745aef9699 100644 --- a/src/common/strconv.cpp +++ b/src/common/strconv.cpp @@ -662,8 +662,11 @@ size_t IC_CharSet::MB2WC(wchar_t *buf, const char *psz, size_t n) WC_BSWAP(buf /* _not_ bufPtr */, res) } - // iconv doesn't seem to set the trailing 0 - buf[res] = 0; + // NB: iconv was given only strlen(psz) characters on input, and so + // it couldn't convert the trailing zero. Let's do it ourselves + // if there's some room left for it in the output buffer. + if (res < n) + buf[res] = 0; } else { @@ -724,9 +727,11 @@ size_t IC_CharSet::WC2MB(char *buf, const wchar_t *psz, size_t n) res = n-outbuf; - // iconv() doesn't set the trailing zero, but moves buf to - // that position - buf[0] = 0; + // NB: iconv was given only wcslen(psz) characters on input, and so + // it couldn't convert the trailing zero. Let's do it ourselves + // if there's some room left for it in the output buffer. + if (res < n) + buf[0] = 0; } else {