From 9b824b5b888c1e5c25bcba754feb4b55d72c894d Mon Sep 17 00:00:00 2001 From: deathcap Date: Sat, 30 Jan 2016 15:28:40 -0800 Subject: [PATCH] Legacy ping is only allowed when in HANDSHAKING state (otherwise, varint packet length 254) --- src/client.js | 3 ++- src/transforms/framing.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/client.js b/src/client.js index 8a0a129..fd31a2c 100644 --- a/src/client.js +++ b/src/client.js @@ -14,6 +14,7 @@ class Client extends EventEmitter super(); this.version=version; this.isServer = !!isServer; + this.splitter=framing.createSplitter(); this.setSerializer(states.HANDSHAKING); this.packetsToParse={}; this.serializer; @@ -21,7 +22,6 @@ class Client extends EventEmitter this.framer=framing.createFramer(); this.cipher=null; this.decipher=null; - this.splitter=framing.createSplitter(); this.decompressor=null; this.deserializer; this.isServer; @@ -51,6 +51,7 @@ class Client extends EventEmitter this.deserializer = createDeserializer({ isServer:this.isServer, version:this.version, state: state, packetsToParse: this.packetsToParse}); + this.splitter.recognizeLegacyPing = state === states.HANDSHAKING; this.serializer.on('error', (e) => { var parts=e.field.split("."); diff --git a/src/transforms/framing.js b/src/transforms/framing.js index 38d7eb4..e2ff26c 100644 --- a/src/transforms/framing.js +++ b/src/transforms/framing.js @@ -29,12 +29,12 @@ class Splitter extends Transform { constructor() { super(); this.buffer = new Buffer(0); + this.recognizeLegacyPing = false; } _transform(chunk, enc, cb) { this.buffer = Buffer.concat([this.buffer, chunk]); - // TODO: only decode if in handshake state! important since 254 is a valid varint (encodes as 0xfe 0x01), packet length - if (this.buffer[0] === LEGACY_PING_PACKET_ID) { + if (this.recognizeLegacyPing && this.buffer[0] === LEGACY_PING_PACKET_ID) { // legacy_server_list_ping packet follows a different protocol format // prefix the encoded varint packet id for the deserializer var header = new Buffer(sizeOfVarInt(LEGACY_PING_PACKET_ID));