ASN1_OBJECT *tmpoid = NULL;
int ok = 0;
+ /* With no arguments at all, nothing can be done */
+ if (oid == NULL && sn == NULL && ln == NULL) {
+ ERR_raise(ERR_LIB_OBJ, ERR_R_PASSED_INVALID_ARGUMENT);
+ return 0;
+ }
+
/* Check to see if short or long name already present */
if ((sn != NULL && OBJ_sn2nid(sn) != NID_undef)
|| (ln != NULL && OBJ_ln2nid(ln) != NID_undef)) {
return 0;
}
- /* Convert numerical OID string to an ASN1_OBJECT structure */
- tmpoid = OBJ_txt2obj(oid, 1);
- if (tmpoid == NULL)
- return 0;
+ if (oid != NULL) {
+ /* Convert numerical OID string to an ASN1_OBJECT structure */
+ tmpoid = OBJ_txt2obj(oid, 1);
+ if (tmpoid == NULL)
+ return 0;
+ } else {
+ /* Create a no-OID ASN1_OBJECT */
+ tmpoid = ASN1_OBJECT_new();
+ }
if (!ossl_obj_write_lock(1)) {
ERR_raise(ERR_LIB_OBJ, ERR_R_UNABLE_TO_GET_WRITE_LOCK);
}
/* If NID is not NID_undef then object already exists */
- if (ossl_obj_obj2nid(tmpoid, 0) != NID_undef) {
+ if (oid != NULL
+ && ossl_obj_obj2nid(tmpoid, 0) != NID_undef) {
ERR_raise(ERR_LIB_OBJ, OBJ_R_OID_EXISTS);
goto err;
}