if(!pol->qualifiers) pol->qualifiers = sk_POLICYQUALINFO_new_null();
static POLICYINFO *policy_section(X509V3_CTX *ctx,				STACK_OF(CONF_VALUE) *polstrs, int ia5org){	int i;	CONF_VALUE *cnf;	POLICYINFO *pol;	POLICYQUALINFO *qual;	if(!(pol = POLICYINFO_new())) goto merr;	for(i = 0; i < sk_CONF_VALUE_num(polstrs); i++) {		cnf = sk_CONF_VALUE_value(polstrs, i);		if(!strcmp(cnf->name, "policyIdentifier")) {			ASN1_OBJECT *pobj;			if(!(pobj = OBJ_txt2obj(cnf->value, 0))) {				X509V3err(X509V3_F_POLICY_SECTION,X509V3_R_INVALID_OBJECT_IDENTIFIER);				X509V3_conf_err(cnf);				goto err;			}			pol->policyid = pobj;		} else if(!name_cmp(cnf->name, "CPS")) {			if(!pol->qualifiers) pol->qualifiers =						 sk_POLICYQUALINFO_new_null();			if(!(qual = POLICYQUALINFO_new())) goto merr;			if(!sk_POLICYQUALINFO_push(pol->qualifiers, qual))								 goto merr;			qual->pqualid = OBJ_nid2obj(NID_id_qt_cps);			qual->d.cpsuri = M_ASN1_IA5STRING_new();			if(!ASN1_STRING_set(qual->d.cpsuri, cnf->value,						 strlen(cnf->value))) goto merr;		} else if(!name_cmp(cnf->name, "userNotice")) {			STACK_OF(CONF_VALUE) *unot;			if(*cnf->value != '@') {				X509V3err(X509V3_F_POLICY_SECTION,X509V3_R_EXPECTED_A_SECTION_NAME);				X509V3_conf_err(cnf);				goto err;			}			unot = X509V3_get_section(ctx, cnf->value + 1);			if(!unot) {				X509V3err(X509V3_F_POLICY_SECTION,X509V3_R_INVALID_SECTION);				X509V3_conf_err(cnf);				goto err;			}			qual = notice_section(ctx, unot, ia5org);			X509V3_section_free(ctx, unot);			if(!qual) goto err;			if(!sk_POLICYQUALINFO_push(pol->qualifiers, qual))								 goto merr;		} else {			X509V3err(X509V3_F_POLICY_SECTION,X509V3_R_INVALID_OPTION);			X509V3_conf_err(cnf);			goto err;		}	}	if(!pol->policyid) {		X509V3err(X509V3_F_POLICY_SECTION,X509V3_R_NO_POLICY_IDENTIFIER);		goto err;	}	return pol;	merr:	X509V3err(X509V3_F_POLICY_SECTION,ERR_R_MALLOC_FAILURE);	err:	POLICYINFO_free(pol);	return NULL;		}