From 382d06794b40391b0cf7961dec89260735897dde Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Wed, 30 Aug 2006 14:08:38 -0700 Subject: [PATCH] crypt32: Simplify CRYPT_AsnDecodeUnicodeNameValueInternal, getting rid of a warning. --- dlls/crypt32/decode.c | 104 +++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 53 deletions(-) diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index d1e40068726..4e20de482c7 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -1511,67 +1511,65 @@ static BOOL WINAPI CRYPT_AsnDecodeUnicodeNameValueInternal( break; default: SetLastError(CRYPT_E_ASN1_BADTAG); + return FALSE; + } + + if (!value) + *pcbStructInfo = bytesNeeded; + else if (*pcbStructInfo < bytesNeeded) + { + *pcbStructInfo = bytesNeeded; + SetLastError(ERROR_MORE_DATA); ret = FALSE; } - if (ret) + else { - if (!value) - *pcbStructInfo = bytesNeeded; - else if (*pcbStructInfo < bytesNeeded) - { - *pcbStructInfo = bytesNeeded; - SetLastError(ERROR_MORE_DATA); - ret = FALSE; - } - else + *pcbStructInfo = bytesNeeded; + value->dwValueType = valueType; + if (dataLen) { - *pcbStructInfo = bytesNeeded; - value->dwValueType = valueType; - if (dataLen) - { - DWORD i; - LPWSTR str = (LPWSTR)value->Value.pbData; + DWORD i; + LPWSTR str = (LPWSTR)value->Value.pbData; - assert(value->Value.pbData); - switch (pbEncoded[0]) - { - case ASN_NUMERICSTRING: - case ASN_PRINTABLESTRING: - case ASN_IA5STRING: - case ASN_T61STRING: - case ASN_VIDEOTEXSTRING: - case ASN_GRAPHICSTRING: - case ASN_VISIBLESTRING: - case ASN_GENERALSTRING: - value->Value.cbData = dataLen * 2; - for (i = 0; i < dataLen; i++) - str[i] = pbEncoded[1 + lenBytes + i]; - break; - case ASN_UNIVERSALSTRING: - value->Value.cbData = dataLen / 2; - for (i = 0; i < dataLen / 4; i++) - str[i] = (pbEncoded[1 + lenBytes + 2 * i + 2] << 8) - | pbEncoded[1 + lenBytes + 2 * i + 3]; - break; - case ASN_BMPSTRING: - value->Value.cbData = dataLen; - for (i = 0; i < dataLen / 2; i++) - str[i] = (pbEncoded[1 + lenBytes + 2 * i] << 8) | - pbEncoded[1 + lenBytes + 2 * i + 1]; - break; - case ASN_UTF8STRING: - value->Value.cbData = MultiByteToWideChar(CP_UTF8, 0, - (LPSTR)pbEncoded + 1 + lenBytes, dataLen, - str, bytesNeeded - sizeof(CERT_NAME_VALUE)) * 2; - break; - } - } - else + assert(value->Value.pbData); + switch (pbEncoded[0]) { - value->Value.cbData = 0; - value->Value.pbData = NULL; + case ASN_NUMERICSTRING: + case ASN_PRINTABLESTRING: + case ASN_IA5STRING: + case ASN_T61STRING: + case ASN_VIDEOTEXSTRING: + case ASN_GRAPHICSTRING: + case ASN_VISIBLESTRING: + case ASN_GENERALSTRING: + value->Value.cbData = dataLen * 2; + for (i = 0; i < dataLen; i++) + str[i] = pbEncoded[1 + lenBytes + i]; + break; + case ASN_UNIVERSALSTRING: + value->Value.cbData = dataLen / 2; + for (i = 0; i < dataLen / 4; i++) + str[i] = (pbEncoded[1 + lenBytes + 2 * i + 2] << 8) + | pbEncoded[1 + lenBytes + 2 * i + 3]; + break; + case ASN_BMPSTRING: + value->Value.cbData = dataLen; + for (i = 0; i < dataLen / 2; i++) + str[i] = (pbEncoded[1 + lenBytes + 2 * i] << 8) | + pbEncoded[1 + lenBytes + 2 * i + 1]; + break; + case ASN_UTF8STRING: + value->Value.cbData = MultiByteToWideChar(CP_UTF8, 0, + (LPSTR)pbEncoded + 1 + lenBytes, dataLen, + str, bytesNeeded - sizeof(CERT_NAME_VALUE)) * 2; + break; } } + else + { + value->Value.cbData = 0; + value->Value.pbData = NULL; + } } } return ret; -- 2.11.4.GIT