Commit 69e2bd32 authored by Matt Caswell's avatar Matt Caswell
Browse files

Don't leak memory on ASN1_item_pack() error path



The ASN1_item_pack() function was leaking an ASN1_STRING object on error
paths.

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent fe71bb3a
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -22,23 +22,30 @@ ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct)
            ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE);
            return NULL;
        }
        if (oct)
            *oct = octmp;
    } else
    } else {
        octmp = *oct;
    }

    OPENSSL_free(octmp->data);
    octmp->data = NULL;

    if ((octmp->length = ASN1_item_i2d(obj, &octmp->data, it)) == 0) {
        ASN1err(ASN1_F_ASN1_ITEM_PACK, ASN1_R_ENCODE_ERROR);
        return NULL;
        goto err;
    }
    if (!octmp->data) {
    if (octmp->data == NULL) {
        ASN1err(ASN1_F_ASN1_ITEM_PACK, ERR_R_MALLOC_FAILURE);
        return NULL;
        goto err;
    }

    if (oct != NULL && *oct == NULL)
        *oct = octmp;

    return octmp;
 err:
    if (oct == NULL || *oct == NULL)
        ASN1_STRING_free(octmp);
    return NULL;
}

/* Extract an ASN1 object from an ASN1_STRING */