if ((subj_alt_names = X509_get_ext_d2i(cert, NID_subject_alt_name, NULL, NULL))) {
int num_subj_alt_names = sk_GENERAL_NAME_num(subj_alt_names);
for (i = 0; !found && i < num_subj_alt_names; i++) {
+ int ntype;
GENERAL_NAME *subj_alt_name = sk_GENERAL_NAME_value(subj_alt_names, i);
- if (subj_alt_name->type == GEN_DNS &&
- strlen((const char *)subj_alt_name->d.ia5->data) == (size_t)subj_alt_name->d.ia5->length &&
- host_matches(hostname, (const char *)(subj_alt_name->d.ia5->data)))
+ ASN1_STRING *subj_alt_str = GENERAL_NAME_get0_value(subj_alt_name, &ntype);
+
+ if (ntype == GEN_DNS &&
+ strlen((const char *)ASN1_STRING_get0_data(subj_alt_str)) ==
+ ASN1_STRING_length(subj_alt_str) &&
+ host_matches(hostname, (const char *)ASN1_STRING_get0_data(subj_alt_str)))
found = 1;
}
sk_GENERAL_NAME_pop_free(subj_alt_names, GENERAL_NAME_free);