X509_ATTRIBUTE *new_attr=NULL; STACK_OF(X509_ATTRIBUTE) *sk=NULL;  if ((x != NULL) && (*x == NULL)) { if ((sk=sk_X509_ATTRIBUTE_new_null()) == NULL) goto err; } else sk= *x;  if ((new_attr=X509_ATTRIBUTE_dup(attr)) == NULL) goto err2; if (!sk_X509_ATTRIBUTE_push(sk,new_attr)) goto err; if ((x != NULL) && (*x == NULL)) *x=sk; return(sk); err: X509err(X509_F_X509AT_ADD1_ATTR,ERR_R_MALLOC_FAILURE); err2: if (new_attr != NULL) X509_ATTRIBUTE_free(new_attr); if (sk != NULL) sk_X509_ATTRIBUTE_free(sk); return(NULL);
X509_ATTRIBUTE *attr; STACK_OF(X509_ATTRIBUTE) *ret; attr = X509_ATTRIBUTE_create_by_txt(NULL, attrname, type, bytes, len); if(!attr) return 0; ret = X509at_add1_attr(x, attr); X509_ATTRIBUTE_free(attr); return ret;
STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,					 X509_ATTRIBUTE *attr){	X509_ATTRIBUTE *new_attr=NULL;	STACK_OF(X509_ATTRIBUTE) *sk=NULL;	if ((x != NULL) && (*x == NULL))		{		if ((sk=sk_X509_ATTRIBUTE_new_null()) == NULL)			goto err;		}	else		sk= *x;	if ((new_attr=X509_ATTRIBUTE_dup(attr)) == NULL)		goto err2;	if (!sk_X509_ATTRIBUTE_push(sk,new_attr))		goto err;	if ((x != NULL) && (*x == NULL))		*x=sk;	return(sk);err:	X509err(X509_F_X509AT_ADD1_ATTR,ERR_R_MALLOC_FAILURE);err2:	if (new_attr != NULL) X509_ATTRIBUTE_free(new_attr);	if (sk != NULL) sk_X509_ATTRIBUTE_free(sk);	return(NULL);}