wintrust: Return error directly from SOFTPUB_DecodeInnerContent.

This commit is contained in:
Juan Lang 2010-01-27 10:40:32 -08:00 committed by Alexandre Julliard
parent 8085ea5fe0
commit 6099adf79a
1 changed files with 26 additions and 13 deletions

View File

@ -216,56 +216,70 @@ static DWORD SOFTPUB_CreateStoreFromMessage(CRYPT_PROVIDER_DATA *data)
static DWORD SOFTPUB_DecodeInnerContent(CRYPT_PROVIDER_DATA *data) static DWORD SOFTPUB_DecodeInnerContent(CRYPT_PROVIDER_DATA *data)
{ {
BOOL ret; BOOL ret;
DWORD size; DWORD size, err = ERROR_SUCCESS;
LPSTR oid = NULL; LPSTR oid = NULL;
LPBYTE buf = NULL; LPBYTE buf = NULL;
ret = CryptMsgGetParam(data->hMsg, CMSG_INNER_CONTENT_TYPE_PARAM, 0, NULL, ret = CryptMsgGetParam(data->hMsg, CMSG_INNER_CONTENT_TYPE_PARAM, 0, NULL,
&size); &size);
if (!ret) if (!ret)
{
err = GetLastError();
goto error; goto error;
}
oid = data->psPfns->pfnAlloc(size); oid = data->psPfns->pfnAlloc(size);
if (!oid) if (!oid)
{ {
SetLastError(ERROR_OUTOFMEMORY); err = ERROR_OUTOFMEMORY;
ret = FALSE;
goto error; goto error;
} }
ret = CryptMsgGetParam(data->hMsg, CMSG_INNER_CONTENT_TYPE_PARAM, 0, oid, ret = CryptMsgGetParam(data->hMsg, CMSG_INNER_CONTENT_TYPE_PARAM, 0, oid,
&size); &size);
if (!ret) if (!ret)
{
err = GetLastError();
goto error; goto error;
}
ret = CryptMsgGetParam(data->hMsg, CMSG_CONTENT_PARAM, 0, NULL, &size); ret = CryptMsgGetParam(data->hMsg, CMSG_CONTENT_PARAM, 0, NULL, &size);
if (!ret) if (!ret)
{
err = GetLastError();
goto error; goto error;
}
buf = data->psPfns->pfnAlloc(size); buf = data->psPfns->pfnAlloc(size);
if (!buf) if (!buf)
{ {
SetLastError(ERROR_OUTOFMEMORY); err = ERROR_OUTOFMEMORY;
ret = FALSE;
goto error; goto error;
} }
ret = CryptMsgGetParam(data->hMsg, CMSG_CONTENT_PARAM, 0, buf, &size); ret = CryptMsgGetParam(data->hMsg, CMSG_CONTENT_PARAM, 0, buf, &size);
if (!ret) if (!ret)
{
err = GetLastError();
goto error; goto error;
}
ret = CryptDecodeObject(data->dwEncoding, oid, buf, size, 0, NULL, &size); ret = CryptDecodeObject(data->dwEncoding, oid, buf, size, 0, NULL, &size);
if (!ret) if (!ret)
{
err = GetLastError();
goto error; goto error;
}
data->u.pPDSip->psIndirectData = data->psPfns->pfnAlloc(size); data->u.pPDSip->psIndirectData = data->psPfns->pfnAlloc(size);
if (!data->u.pPDSip->psIndirectData) if (!data->u.pPDSip->psIndirectData)
{ {
SetLastError(ERROR_OUTOFMEMORY); err = ERROR_OUTOFMEMORY;
ret = FALSE;
goto error; goto error;
} }
ret = CryptDecodeObject(data->dwEncoding, oid, buf, size, 0, ret = CryptDecodeObject(data->dwEncoding, oid, buf, size, 0,
data->u.pPDSip->psIndirectData, &size); data->u.pPDSip->psIndirectData, &size);
if (!ret)
err = GetLastError();
error: error:
TRACE("returning %d\n", ret); TRACE("returning %d\n", err);
data->psPfns->pfnFree(oid); data->psPfns->pfnFree(oid);
data->psPfns->pfnFree(buf); data->psPfns->pfnFree(buf);
return ret; return err;
} }
static BOOL SOFTPUB_LoadCertMessage(CRYPT_PROVIDER_DATA *data) static BOOL SOFTPUB_LoadCertMessage(CRYPT_PROVIDER_DATA *data)
@ -347,8 +361,8 @@ static DWORD SOFTPUB_LoadFileMessage(CRYPT_PROVIDER_DATA *data)
err = SOFTPUB_CreateStoreFromMessage(data); err = SOFTPUB_CreateStoreFromMessage(data);
if (err) if (err)
goto error; goto error;
if (!SOFTPUB_DecodeInnerContent(data)) err = SOFTPUB_DecodeInnerContent(data);
err = GetLastError();
error: error:
return err; return err;
} }
@ -385,8 +399,7 @@ static DWORD SOFTPUB_LoadCatalogMessage(CRYPT_PROVIDER_DATA *data)
err = SOFTPUB_CreateStoreFromMessage(data); err = SOFTPUB_CreateStoreFromMessage(data);
if (err) if (err)
goto error; goto error;
if (!SOFTPUB_DecodeInnerContent(data)) err = SOFTPUB_DecodeInnerContent(data);
err = GetLastError();
/* FIXME: this loads the catalog file, but doesn't validate the member. */ /* FIXME: this loads the catalog file, but doesn't validate the member. */
error: error:
CloseHandle(catalog); CloseHandle(catalog);