- if ((buf=(unsigned char *)Malloc(i)) == NULL)
- return(NID_undef);
- a2d_ASN1_OBJECT(buf,i,s,-1);
- p=buf;
- op=d2i_ASN1_OBJECT(NULL,&p,i);
- if (op == NULL) return(NID_undef);
- ret=OBJ_obj2nid(op);
- ASN1_OBJECT_free(op);
- Free(buf);
- }
- }
- return(ret);
+ /* Work out size of content octets */
+ i=a2d_ASN1_OBJECT(NULL,0,s,-1);
+ if (i <= 0) return NULL;
+ /* Work out total size */
+ j = ASN1_object_size(0,i,V_ASN1_OBJECT);
+
+ if((buf=(unsigned char *)Malloc(j)) == NULL) return NULL;
+
+ p = buf;
+ /* Write out tag+length */
+ ASN1_put_object(&p,0,i,V_ASN1_OBJECT,V_ASN1_UNIVERSAL);
+ /* Write out contents */
+ a2d_ASN1_OBJECT(p,i,s,-1);
+
+ p=buf;
+ op=d2i_ASN1_OBJECT(NULL,&p,i);
+ Free(buf);
+ return op;