From ceaef19fb70523852441c8dd3ba647fa6ad217b9 Mon Sep 17 00:00:00 2001
From: Adam Ierymenko <adam.ierymenko@gmail.com>
Date: Mon, 30 Nov 2015 17:20:12 -0800
Subject: [PATCH] Fix for GitHub issue #260 -- fix for (non-exploitable) crash
 in network preferred relay code

---
 node/Peer.hpp   |  1 -
 node/Switch.cpp | 10 ++++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/node/Peer.hpp b/node/Peer.hpp
index 7b8d18eae..5816db69f 100644
--- a/node/Peer.hpp
+++ b/node/Peer.hpp
@@ -263,7 +263,6 @@ public:
 		return (l * (((unsigned int)tsr / (ZT_PEER_DIRECT_PING_DELAY + 1000)) + 1));
 	}
 
-
 	/**
 	 * Update latency with a new direct measurment
 	 *
diff --git a/node/Switch.cpp b/node/Switch.cpp
index 74e2f4c61..bf0d1aff1 100644
--- a/node/Switch.cpp
+++ b/node/Switch.cpp
@@ -820,10 +820,12 @@ bool Switch::_trySend(const Packet &packet,bool encrypt,uint64_t nwid)
 				for(std::vector< std::pair<Address,InetAddress> >::const_iterator r(nconf->relays().begin());r!=nconf->relays().end();++r) {
 					if (r->first != peer->address()) {
 						SharedPtr<Peer> rp(RR->topology->getPeer(r->first));
-						const unsigned int q = rp->relayQuality(now);
-						if ((rp)&&(q < bestq)) { // SUBTILE: < == don't use these if they are nil quality (unsigned int max), instead use a root
-							bestq = q;
-							rp.swap(relay);
+						if (rp) {
+							const unsigned int q = rp->relayQuality(now);
+							if (q < bestq) { // SUBTILE: < == don't use these if they are nil quality (unsigned int max), instead use a root
+								bestq = q;
+								rp.swap(relay);
+							}
 						}
 					}
 				}