From c69fa07e2de7f0e5a1b6f3b20000209431ad9b75 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Wed, 16 Jan 2008 21:07:04 +0000 Subject: [PATCH] error handling fixes --- src/pe_crypto.cpp | 4 +++- src/peer_connection.cpp | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pe_crypto.cpp b/src/pe_crypto.cpp index 2e1a7e890..a865b4c73 100644 --- a/src/pe_crypto.cpp +++ b/src/pe_crypto.cpp @@ -86,7 +86,7 @@ namespace libtorrent BN_bn2bin(m_DH->pub_key, (unsigned char*)m_dh_local_key); // TODO Check return value } - DH_key_exchange::~DH_key_exchange () + DH_key_exchange::~DH_key_exchange() { TORRENT_ASSERT(m_DH); DH_free(m_DH); @@ -108,6 +108,7 @@ namespace libtorrent int secret_size = DH_compute_key((unsigned char*)dh_secret , bn_remote_pubkey, m_DH); + if (secret_size < 0 || secret_size > 96) throw std::bad_alloc(); if (secret_size != 96) { @@ -139,3 +140,4 @@ namespace libtorrent } // namespace libtorrent #endif // #ifndef TORRENT_DISABLE_ENCRYPTION + diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index 422aefc92..670d5134b 100755 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -1789,7 +1789,8 @@ namespace libtorrent INVARIANT_CHECK; boost::shared_ptr t = m_torrent.lock(); - TORRENT_ASSERT(t); + // this peer might be disconnecting + if (!t) return; TORRENT_ASSERT(t->valid_metadata());