@@ -1346,8 +1346,11 @@ DHPointer DHPointer::New(BignumPointer&& p, BignumPointer&& g){
13461346if (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
13531356return dh;
@@ -1430,7 +1433,10 @@ DataPointer DHPointer::generateKeys() const{
14301433
14311434size_t DHPointer::size () const {
14321435if (!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){
14601466if (!dh_) return false ;
14611467if (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 ();
14631473return true ;
14641474 }
@@ -1468,6 +1478,10 @@ bool DHPointer::setPublicKey(BignumPointer&& key){
14681478bool DHPointer::setPrivateKey (BignumPointer&& key){
14691479if (!dh_) return false ;
14701480if (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 ();
14721486return true ;
14731487 }
0 commit comments