crypt32: Fail if MultiByteToWideChar converts 0 characters.

This commit is contained in:
Juan Lang 2007-10-20 14:22:04 -07:00 committed by Alexandre Julliard
parent 533aa4dcd5
commit 7cf611ef3b

View File

@ -455,7 +455,6 @@ BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,
DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
LPCSTR *ppszError) LPCSTR *ppszError)
{ {
LPWSTR x500, errorStr;
BOOL ret; BOOL ret;
int len; int len;
@ -464,24 +463,39 @@ BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,
ppszError); ppszError);
len = MultiByteToWideChar(CP_ACP, 0, pszX500, -1, NULL, 0); len = MultiByteToWideChar(CP_ACP, 0, pszX500, -1, NULL, 0);
x500 = CryptMemAlloc(len * sizeof(WCHAR)); if (len)
if (x500)
{ {
MultiByteToWideChar(CP_ACP, 0, pszX500, -1, x500, len); LPWSTR x500, errorStr;
ret = CertStrToNameW(dwCertEncodingType, x500, dwStrType, pvReserved,
pbEncoded, pcbEncoded, ppszError ? (LPCWSTR *)&errorStr : NULL);
if (ppszError)
{
DWORD i;
*ppszError = pszX500; if ((x500 = CryptMemAlloc(len * sizeof(WCHAR))))
for (i = 0; i < errorStr - x500; i++) {
*ppszError = CharNextA(*ppszError); MultiByteToWideChar(CP_ACP, 0, pszX500, -1, x500, len);
ret = CertStrToNameW(dwCertEncodingType, x500, dwStrType,
pvReserved, pbEncoded, pcbEncoded,
ppszError ? (LPCWSTR *)&errorStr : NULL);
if (ppszError)
{
DWORD i;
*ppszError = pszX500;
for (i = 0; i < errorStr - x500; i++)
*ppszError = CharNextA(*ppszError);
}
CryptMemFree(x500);
}
else
{
SetLastError(ERROR_OUTOFMEMORY);
ret = FALSE;
} }
CryptMemFree(x500);
} }
else else
{
SetLastError(CRYPT_E_INVALID_X500_STRING);
if (ppszError)
*ppszError = pszX500;
ret = FALSE; ret = FALSE;
}
return ret; return ret;
} }