From 08b41a2dc418a68ccbd21d0426ce83b9976b146a Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 20 Jan 2017 17:40:06 -0800 Subject: [PATCH] peer: throw on destroyed write. --- lib/net/peer.js | 11 ++++++++++- lib/net/pool.js | 8 ++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/net/peer.js b/lib/net/peer.js index 9c0f56f6..982bd7bc 100644 --- a/lib/net/peer.js +++ b/lib/net/peer.js @@ -280,6 +280,9 @@ Peer.prototype._init = function init() { self.destroy(); }); this.bip151.on('rekey', function() { + if (self.destroyed) + return; + self.logger.debug('Rekeying with peer (%s).', self.hostname); self.send(self.bip151.toRekey()); }); @@ -764,6 +767,9 @@ Peer.prototype.flushInv = function flushInv() { var items = []; var i, item, chunk; + if (this.destroyed) + return; + if (queue.length === 0) return; @@ -1026,7 +1032,7 @@ Peer.prototype.destroy = function destroy() { Peer.prototype.write = function write(data) { if (this.destroyed) - return; + throw new Error('Peer is destroyed (write).'); this.lastSend = util.ms(); @@ -1250,6 +1256,9 @@ Peer.prototype.wait = function wait(type, timeout) { Peer.prototype.send = function send(packet) { var tx, checksum; + if (this.destroyed) + throw new Error('Peer is destroyed (send).'); + // Used cached hashes as the // packet checksum for speed. if (packet.type === packetTypes.TX) { diff --git a/lib/net/pool.js b/lib/net/pool.js index 4e46a795..e885871c 100644 --- a/lib/net/pool.js +++ b/lib/net/pool.js @@ -1255,8 +1255,12 @@ Pool.prototype.handleGetData = co(function* handleGetData(peer, packet) { var unknown = -1; var i, j, item, tx, block, result, height; - if (items.length > 50000) - throw new Error('getdata size too large (' + items.length + ').'); + if (items.length > 50000) { + this.logger.warning('Peer sent a inv >50k items (%s).', peer.hostname); + peer.increaseBan(100); + peer.destroy(); + return; + } for (i = 0; i < items.length; i++) { item = items[i];