From d0b2a0da14d2a1b8ddbd99faaccf985c96896a18 Mon Sep 17 00:00:00 2001 From: EinMByte Date: Wed, 22 Jul 2015 12:11:21 +0200 Subject: [PATCH] Fix #227: Transports::GetRandomPeer() crashes if m_Peers is empty --- Transports.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Transports.cpp b/Transports.cpp index 5f2d2764..52856c5f 100644 --- a/Transports.cpp +++ b/Transports.cpp @@ -491,10 +491,14 @@ namespace transport std::shared_ptr Transports::GetRandomPeer () const { - CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator (); - auto it = m_Peers.begin (); - std::advance (it, rnd.GenerateWord32 (0, m_Peers.size () - 1)); - return it != m_Peers.end () ? it->second.router : nullptr; + if(m_Peers.empty()) // ensure m.Peers.size() >= 1 + return nullptr; + + CryptoPP::RandomNumberGenerator& rnd = i2p::context.GetRandomNumberGenerator(); + auto it = m_Peers.begin(); + std::advance(it, rnd.GenerateWord32(0, m_Peers.size () - 1)); + + return it->second.router; } } }