diff --git a/llarp/dht/localrouterlookup.cpp b/llarp/dht/localrouterlookup.cpp index 7ab3955df..a60194a61 100644 --- a/llarp/dht/localrouterlookup.cpp +++ b/llarp/dht/localrouterlookup.cpp @@ -43,7 +43,11 @@ namespace llarp found = rc; } valuesFound.clear(); - valuesFound.emplace_back(found); + if(not found.pubkey.IsZero()) + { + valuesFound.resize(1); + valuesFound[0] = found; + } } routing::DHTMessage msg; msg.M.emplace_back(new GotRouterMessage(parent->OurKey(), whoasked.txid, diff --git a/llarp/dht/messages/findrouter.cpp b/llarp/dht/messages/findrouter.cpp index d2cef6c0d..d173f0475 100644 --- a/llarp/dht/messages/findrouter.cpp +++ b/llarp/dht/messages/findrouter.cpp @@ -167,7 +167,12 @@ namespace llarp return false; } RouterContact found; - const Key_t k{K}; + if(K.IsZero()) + { + llarp::LogError("invalid FRM from ", From, "K is zero"); + return false; + } + const Key_t k(K); if(exploritory) return dht.HandleExploritoryRouterLookup(From, txid, K, replies); if(!dht.GetRouter()->ConnectionToRouterAllowed(K)) diff --git a/llarp/dht/messages/gotrouter.cpp b/llarp/dht/messages/gotrouter.cpp index 933df1928..701ac8bbe 100644 --- a/llarp/dht/messages/gotrouter.cpp +++ b/llarp/dht/messages/gotrouter.cpp @@ -113,6 +113,8 @@ namespace llarp LogDebug("got ", R.size(), " results in GRM for lookup"); if(R.size() == 0) dht.pendingRouterLookups().NotFound(owner, K); + else if(R[0].pubkey.IsZero()) + return false; else dht.pendingRouterLookups().Found(owner, R[0].pubkey, R); return true; diff --git a/llarp/service/endpoint.cpp b/llarp/service/endpoint.cpp index 534bd185c..18f842eef 100644 --- a/llarp/service/endpoint.cpp +++ b/llarp/service/endpoint.cpp @@ -733,11 +733,11 @@ namespace llarp { if(msg->R.size()) { - auto* job = new llarp_async_verify_rc; - job->nodedb = Router()->nodedb(); - job->cryptoworker = Router()->threadpool(); - job->diskworker = Router()->diskworker(); - job->logic = Router()->logic(); + llarp_async_verify_rc* job = new llarp_async_verify_rc(); + job->nodedb = Router()->nodedb(); + job->cryptoworker = Router()->threadpool(); + job->diskworker = Router()->diskworker(); + job->logic = Router()->logic(); job->hook = std::bind(&Endpoint::HandleVerifyGotRouter, this, msg, std::placeholders::_1); job->rc = msg->R[0];