提交 19934970 编写于 作者: A Andy Polyakov

asn1/asn_moid.c: overhaul do_create.

Original could allocate nid and then bail out on malloc failure. Instead
allocate first *then* attempt to create object.
Reviewed-by: NKurt Roeckx <kurt@roeckx.be>
Reviewed-by: NRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6998)
上级 f112dc82
...@@ -60,29 +60,20 @@ void ASN1_add_oid_module(void) ...@@ -60,29 +60,20 @@ void ASN1_add_oid_module(void)
static int do_create(const char *value, const char *name) static int do_create(const char *value, const char *name)
{ {
int nid; int nid;
ASN1_OBJECT *oid;
const char *ln, *ostr, *p; const char *ln, *ostr, *p;
char *lntmp; char *lntmp = NULL;
p = strrchr(value, ','); p = strrchr(value, ',');
if (!p) { if (p == NULL) {
ln = name; ln = name;
ostr = value; ostr = value;
} else { } else {
ln = NULL; ln = value;
ostr = p + 1; ostr = p + 1;
if (!*ostr) if (*ostr == '\0')
return 0; return 0;
while (ossl_isspace(*ostr)) while (ossl_isspace(*ostr))
ostr++; ostr++;
}
nid = OBJ_create(ostr, name, ln);
if (nid == NID_undef)
return 0;
if (p) {
ln = value;
while (ossl_isspace(*ln)) while (ossl_isspace(*ln))
ln++; ln++;
p--; p--;
...@@ -97,10 +88,13 @@ static int do_create(const char *value, const char *name) ...@@ -97,10 +88,13 @@ static int do_create(const char *value, const char *name)
return 0; return 0;
} }
memcpy(lntmp, ln, p - ln); memcpy(lntmp, ln, p - ln);
lntmp[p - ln] = 0; lntmp[p - ln] = '\0';
oid = OBJ_nid2obj(nid); ln = lntmp;
oid->ln = lntmp;
} }
return 1; nid = OBJ_create(ostr, name, ln);
OPENSSL_free(lntmp);
return nid != NID_undef;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册