Author: hbelusca
Date: Sun Oct 18 02:14:21 2015
New Revision: 69582
URL:
http://svn.reactos.org/svn/reactos?rev=69582&view=rev
Log:
[COMSUPP]: Fix string length computations.
Modified:
trunk/reactos/lib/sdk/comsupp/comsupp.cpp
Modified: trunk/reactos/lib/sdk/comsupp/comsupp.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/comsupp/comsupp.cp…
==============================================================================
--- trunk/reactos/lib/sdk/comsupp/comsupp.cpp [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/comsupp/comsupp.cpp [iso-8859-1] Sun Oct 18 02:14:21 2015
@@ -62,13 +62,12 @@
if (!pSrc) return NULL;
- /* Compute the needed size without the NULL terminator */
+ /* Compute the needed size with the NULL terminator */
cwch = ::MultiByteToWideChar(CP_ACP /* CP_UTF8 */, 0, pSrc, -1, NULL, 0);
if (cwch == 0) return NULL;
- cwch--;
- /* Allocate the BSTR */
- wsOut = ::SysAllocStringLen(NULL, cwch);
+ /* Allocate the BSTR (without the NULL terminator) */
+ wsOut = ::SysAllocStringLen(NULL, cwch - 1);
if (!wsOut)
{
::_com_issue_error(HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY));
@@ -97,11 +96,11 @@
if (!pSrc) return NULL;
- /* Retrieve the size of the BSTR without the NULL terminator */
- cwch = ::SysStringLen(pSrc);
+ /* Retrieve the size of the BSTR with the NULL terminator */
+ cwch = ::SysStringLen(pSrc) + 1;
/* Compute the needed size with the NULL terminator */
- cb = ::WideCharToMultiByte(CP_ACP /* CP_UTF8 */, 0, pSrc, cwch + 1, NULL, 0, NULL,
NULL);
+ cb = ::WideCharToMultiByte(CP_ACP /* CP_UTF8 */, 0, pSrc, cwch, NULL, 0, NULL,
NULL);
if (cb == 0)
{
cwch = ::GetLastError();
@@ -118,8 +117,8 @@
}
/* Convert the string and NULL-terminate */
- szOut[cb - 1] = '\0';
- if (::WideCharToMultiByte(CP_ACP /* CP_UTF8 */, 0, pSrc, cwch + 1, szOut, cb, NULL,
NULL) == 0)
+ szOut[cb - 1] = '\0';
+ if (::WideCharToMultiByte(CP_ACP /* CP_UTF8 */, 0, pSrc, cwch, szOut, cb, NULL, NULL)
== 0)
{
/* We failed, clean everything up */
cwch = ::GetLastError();