Commit 19934970 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

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: default avatarKurt Roeckx <kurt@roeckx.be>
Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6998)
parent f112dc82
Loading
Loading
Loading
Loading
+12 −18
Original line number Diff line number Diff line
@@ -60,29 +60,20 @@ void ASN1_add_oid_module(void)
static int do_create(const char *value, const char *name)
{
    int nid;
    ASN1_OBJECT *oid;
    const char *ln, *ostr, *p;
    char *lntmp;
    char *lntmp = NULL;

    p = strrchr(value, ',');
    if (!p) {
    if (p == NULL) {
        ln = name;
        ostr = value;
    } else {
        ln = NULL;
        ln = value;
        ostr = p + 1;
        if (!*ostr)
        if (*ostr == '\0')
            return 0;
        while (ossl_isspace(*ostr))
            ostr++;
    }

    nid = OBJ_create(ostr, name, ln);

    if (nid == NID_undef)
        return 0;

    if (p) {
        ln = value;
        while (ossl_isspace(*ln))
            ln++;
        p--;
@@ -97,10 +88,13 @@ static int do_create(const char *value, const char *name)
            return 0;
        }
        memcpy(lntmp, ln, p - ln);
        lntmp[p - ln] = 0;
        oid = OBJ_nid2obj(nid);
        oid->ln = lntmp;
        lntmp[p - ln] = '\0';
        ln = lntmp;
    }

    return 1;
    nid = OBJ_create(ostr, name, ln);

    OPENSSL_free(lntmp);

    return nid != NID_undef;
}