]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dcrypt: Free existing BIGNUMs in setters
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 3 Sep 2019 08:57:17 +0000 (11:57 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Mon, 23 Sep 2019 05:47:59 +0000 (08:47 +0300)
src/lib-dcrypt/dcrypt-openssl.c

index ba29ff505c5dd02fd8396d94f0f1c39b18795ea9..c0e867eb13a4650798d34fd817e0ef7a2a7b416f 100644 (file)
@@ -1610,8 +1610,11 @@ static int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
                RSAerr(0, ERR_R_PASSED_NULL_PARAMETER);
                return 0;
        }
+       BN_free(r->n);
        r->n = n;
+       BN_free(r->e);
        r->e = e;
+       BN_free(r->d);
        r->d = d;
        return 1;
 }
@@ -1623,7 +1626,9 @@ static int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q)
                RSAerr(0, ERR_R_PASSED_NULL_PARAMETER);
                return 0;
        }
+       BN_free(r->p);
        r->p = p;
+       BN_free(r->q);
        r->q = q;
        return 1;
 }
@@ -1635,8 +1640,11 @@ static int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
                RSAerr(0, ERR_R_PASSED_NULL_PARAMETER);
                return 0;
        }
+       BN_free(r->dmp1);
        r->dmp1 = dmp1;
+       BN_free(r->dmq1);
        r->dmq1 = dmq1;
+       BN_free(r->iqmp);
        r->iqmp = iqmp;
        return 1;
 }
@@ -3180,7 +3188,9 @@ static int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
                return 0;
        }
 
+       BN_free(sig->r);
        sig->r = r;
+       BN_free(sig->s);
        sig->s = s;
 
        return 1;