Commit c29f83c0 authored by FdaSilvaYY's avatar FdaSilvaYY Committed by Andy Polyakov
Browse files

Fix possible leaks on sk_X509_EXTENSION_push() failure ...

parent 046c5f73
Loading
Loading
Loading
Loading
+15 −7
Original line number Original line Diff line number Diff line
@@ -286,9 +286,9 @@ void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
                    int crit, unsigned long flags)
                    int crit, unsigned long flags)
{
{
    int extidx = -1;
    int errcode, extidx = -1;
    int errcode;
    X509_EXTENSION *ext = NULL, *extmp;
    X509_EXTENSION *ext, *extmp;
    STACK_OF(X509_EXTENSION) *ret = NULL;
    unsigned long ext_op = flags & X509V3_ADD_OP_MASK;
    unsigned long ext_op = flags & X509V3_ADD_OP_MASK;


    /*
    /*
@@ -347,13 +347,21 @@ int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
        return 1;
        return 1;
    }
    }


    if (!*x && !(*x = sk_X509_EXTENSION_new_null()))
    if ((ret = *x) == NULL
        return -1;
         && (ret = sk_X509_EXTENSION_new_null()) == NULL)
    if (!sk_X509_EXTENSION_push(*x, ext))
        goto m_fail;
        return -1;
    if (!sk_X509_EXTENSION_push(ret, ext))
        goto m_fail;


    *x = ret;
    return 1;
    return 1;


 m_fail:
    if (ret != *x)
        sk_X509_EXTENSION_free(ret);
    X509_EXTENSION_free(ext);
    return -1;

 err:
 err:
    if (!(flags & X509V3_ADD_SILENT))
    if (!(flags & X509V3_ADD_SILENT))
        X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode);
        X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode);