diff --git a/dlls/crypt32/chain.c b/dlls/crypt32/chain.c index 748c7ce746..d112673d8c 100644 --- a/dlls/crypt32/chain.c +++ b/dlls/crypt32/chain.c @@ -3163,10 +3163,6 @@ static BOOL match_domain_component(LPCWSTR allowed_component, DWORD allowed_len, *see_wildcard = FALSE; - /* permit server_len to be one byte short if allowed_component is NULL terminated */ - if(allowed_component[allowed_len-1] == 0) - allowed_len--; - if (server_len < allowed_len) { WARN_(chain)("domain component %s too short for %s\n", @@ -3226,6 +3222,13 @@ static BOOL match_common_name(LPCWSTR server_name, const CERT_RDN_ATTR *nameAttr TRACE_(chain)("CN = %s\n", debugstr_wn(allowed_component, allowed_len)); + /* Remove trailing NULLs from the allowed name; while they shouldn't appear + * in a certificate in the first place, they sometimes do, and they should + * be ignored. + */ + while (allowed_len && allowed_component[allowed_len - 1] == 0) + allowed_len--; + /* From RFC 2818 (HTTP over TLS), section 3.1: * "Names may contain the wildcard character * which is considered to match * any single domain name component or component fragment. E.g.,