@@ -1346,8 +1346,11 @@ DHPointer DHPointer::New(BignumPointer&& p, BignumPointer&& g) {
13461346 if (DH_set0_pqg (dh.get (), p.get (), nullptr , g.get ()) != 1 ) return {};
13471347
13481348 // If the call above is successful, the DH object takes ownership of the
1349- // BIGNUMs, so we must release them here.
1349+ // BIGNUMs, so we must release them here. Unfortunately coverity does not
1350+ // know that so we need to tell it not to complain.
1351+ // coverity[resource_leak]
13501352 p.release ();
1353+ // coverity[resource_leak]
13511354 g.release ();
13521355
13531356 return dh;
@@ -1430,7 +1433,10 @@ DataPointer DHPointer::generateKeys() const {
14301433
14311434size_t DHPointer::size () const {
14321435 if (!dh_) return 0 ;
1433- return DH_size (dh_.get ());
1436+ int ret = DH_size (dh_.get ());
1437+ // DH_size can return a -1 on error but we just want to return a 0
1438+ // in that case so we don't wrap around when returning the size_t.
1439+ return ret >= 0 ? static_cast <size_t >(ret) : 0 ;
14341440}
14351441
14361442DataPointer DHPointer::computeSecret (const BignumPointer& peer) const {
@@ -1459,6 +1465,10 @@ DataPointer DHPointer::computeSecret(const BignumPointer& peer) const {
14591465bool DHPointer::setPublicKey (BignumPointer&& key) {
14601466 if (!dh_) return false ;
14611467 if (DH_set0_key (dh_.get (), key.get (), nullptr ) == 1 ) {
1468+ // If DH_set0_key returns successfully, then dh_ takes ownership of the
1469+ // BIGNUM, so we must release it here. Unfortunately coverity does not
1470+ // know that so we need to tell it not to complain.
1471+ // coverity[resource_leak]
14621472 key.release ();
14631473 return true ;
14641474 }
@@ -1468,6 +1478,10 @@ bool DHPointer::setPublicKey(BignumPointer&& key) {
14681478bool DHPointer::setPrivateKey (BignumPointer&& key) {
14691479 if (!dh_) return false ;
14701480 if (DH_set0_key (dh_.get (), nullptr , key.get ()) == 1 ) {
1481+ // If DH_set0_key returns successfully, then dh_ takes ownership of the
1482+ // BIGNUM, so we must release it here. Unfortunately coverity does not
1483+ // know that so we need to tell it not to complain.
1484+ // coverity[resource_leak]
14711485 key.release ();
14721486 return true ;
14731487 }
0 commit comments