wininet: Returned certificate strings are always ASCII.
This commit is contained in:
parent
86732e04d8
commit
56ebc04ab6
@ -1820,60 +1820,33 @@ static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffe
|
|||||||
case INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT: {
|
case INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT: {
|
||||||
PCCERT_CONTEXT context;
|
PCCERT_CONTEXT context;
|
||||||
|
|
||||||
if(*size < sizeof(INTERNET_CERTIFICATE_INFOW)) {
|
if(*size < sizeof(INTERNET_CERTIFICATE_INFOA)) {
|
||||||
*size = sizeof(INTERNET_CERTIFICATE_INFOW);
|
*size = sizeof(INTERNET_CERTIFICATE_INFOA);
|
||||||
return ERROR_INSUFFICIENT_BUFFER;
|
return ERROR_INSUFFICIENT_BUFFER;
|
||||||
}
|
}
|
||||||
|
|
||||||
context = (PCCERT_CONTEXT)NETCON_GetCert(&(req->netConnection));
|
context = (PCCERT_CONTEXT)NETCON_GetCert(&(req->netConnection));
|
||||||
if(context) {
|
if(context) {
|
||||||
INTERNET_CERTIFICATE_INFOW *info = (INTERNET_CERTIFICATE_INFOW*)buffer;
|
INTERNET_CERTIFICATE_INFOA *info = (INTERNET_CERTIFICATE_INFOA*)buffer;
|
||||||
DWORD len;
|
DWORD len;
|
||||||
|
|
||||||
memset(info, 0, sizeof(INTERNET_CERTIFICATE_INFOW));
|
memset(info, 0, sizeof(INTERNET_CERTIFICATE_INFOW));
|
||||||
info->ftExpiry = context->pCertInfo->NotAfter;
|
info->ftExpiry = context->pCertInfo->NotAfter;
|
||||||
info->ftStart = context->pCertInfo->NotBefore;
|
info->ftStart = context->pCertInfo->NotBefore;
|
||||||
if(unicode) {
|
len = CertNameToStrA(context->dwCertEncodingType,
|
||||||
len = CertNameToStrW(context->dwCertEncodingType,
|
|
||||||
&context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, NULL, 0);
|
&context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, NULL, 0);
|
||||||
info->lpszSubjectInfo = LocalAlloc(0, len*sizeof(WCHAR));
|
info->lpszSubjectInfo = LocalAlloc(0, len);
|
||||||
if(info->lpszSubjectInfo)
|
if(info->lpszSubjectInfo)
|
||||||
CertNameToStrW(context->dwCertEncodingType,
|
CertNameToStrA(context->dwCertEncodingType,
|
||||||
&context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
|
&context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
|
||||||
info->lpszSubjectInfo, len);
|
info->lpszSubjectInfo, len);
|
||||||
len = CertNameToStrW(context->dwCertEncodingType,
|
len = CertNameToStrA(context->dwCertEncodingType,
|
||||||
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, NULL, 0);
|
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, NULL, 0);
|
||||||
info->lpszIssuerInfo = LocalAlloc(0, len*sizeof(WCHAR));
|
info->lpszIssuerInfo = LocalAlloc(0, len);
|
||||||
if (info->lpszIssuerInfo)
|
if(info->lpszIssuerInfo)
|
||||||
CertNameToStrW(context->dwCertEncodingType,
|
CertNameToStrA(context->dwCertEncodingType,
|
||||||
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
|
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
|
||||||
info->lpszIssuerInfo, len);
|
info->lpszIssuerInfo, len);
|
||||||
}else {
|
|
||||||
INTERNET_CERTIFICATE_INFOA *infoA = (INTERNET_CERTIFICATE_INFOA*)info;
|
|
||||||
|
|
||||||
len = CertNameToStrA(context->dwCertEncodingType,
|
|
||||||
&context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR, NULL, 0);
|
|
||||||
infoA->lpszSubjectInfo = LocalAlloc(0, len);
|
|
||||||
if(infoA->lpszSubjectInfo)
|
|
||||||
CertNameToStrA(context->dwCertEncodingType,
|
|
||||||
&context->pCertInfo->Subject, CERT_SIMPLE_NAME_STR,
|
|
||||||
infoA->lpszSubjectInfo, len);
|
|
||||||
len = CertNameToStrA(context->dwCertEncodingType,
|
|
||||||
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR, NULL, 0);
|
|
||||||
infoA->lpszIssuerInfo = LocalAlloc(0, len);
|
|
||||||
if(infoA->lpszIssuerInfo)
|
|
||||||
CertNameToStrA(context->dwCertEncodingType,
|
|
||||||
&context->pCertInfo->Issuer, CERT_SIMPLE_NAME_STR,
|
|
||||||
infoA->lpszIssuerInfo, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Contrary to MSDN, these do not appear to be set.
|
|
||||||
* lpszProtocolName
|
|
||||||
* lpszSignatureAlgName
|
|
||||||
* lpszEncryptionAlgName
|
|
||||||
* dwKeySize
|
|
||||||
*/
|
|
||||||
CertFreeCertificateContext(context);
|
CertFreeCertificateContext(context);
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -2693,11 +2693,9 @@ static void test_secure_connection(void)
|
|||||||
ok(ret, "InternetQueryOption failed: %d\n", GetLastError());
|
ok(ret, "InternetQueryOption failed: %d\n", GetLastError());
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
todo_wine
|
|
||||||
ok(certificate_structA->lpszSubjectInfo &&
|
ok(certificate_structA->lpszSubjectInfo &&
|
||||||
strlen(certificate_structA->lpszSubjectInfo) > 1,
|
strlen(certificate_structA->lpszSubjectInfo) > 1,
|
||||||
"expected a non-empty subject name\n");
|
"expected a non-empty subject name\n");
|
||||||
todo_wine
|
|
||||||
ok(certificate_structA->lpszIssuerInfo &&
|
ok(certificate_structA->lpszIssuerInfo &&
|
||||||
strlen(certificate_structA->lpszIssuerInfo) > 1,
|
strlen(certificate_structA->lpszIssuerInfo) > 1,
|
||||||
"expected a non-empty issuer name\n");
|
"expected a non-empty issuer name\n");
|
||||||
@ -2726,11 +2724,9 @@ static void test_secure_connection(void)
|
|||||||
ok(ret, "InternetQueryOption failed: %d\n", GetLastError());
|
ok(ret, "InternetQueryOption failed: %d\n", GetLastError());
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
todo_wine
|
|
||||||
ok(certificate_structA->lpszSubjectInfo &&
|
ok(certificate_structA->lpszSubjectInfo &&
|
||||||
strlen(certificate_structA->lpszSubjectInfo) > 1,
|
strlen(certificate_structA->lpszSubjectInfo) > 1,
|
||||||
"expected a non-empty subject name\n");
|
"expected a non-empty subject name\n");
|
||||||
todo_wine
|
|
||||||
ok(certificate_structA->lpszIssuerInfo &&
|
ok(certificate_structA->lpszIssuerInfo &&
|
||||||
strlen(certificate_structA->lpszIssuerInfo) > 1,
|
strlen(certificate_structA->lpszIssuerInfo) > 1,
|
||||||
"expected a non-empty issuer name\n");
|
"expected a non-empty issuer name\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user