From a4d7691299d86edc46931b3978de62a60576ba0d Mon Sep 17 00:00:00 2001 From: Wesley Wolfe Date: Thu, 26 Jul 2012 01:17:09 -0500 Subject: [PATCH] Detect and disconnect 1.3 clients properly. Fixes BUKKIT-1952 --- .../net/minecraft/server/NetLoginHandler.java | 6 ++++++ .../net/minecraft/server/NetworkManager.java | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/NetLoginHandler.java b/src/main/java/net/minecraft/server/NetLoginHandler.java index 436f7de468..89404afdb2 100644 --- a/src/main/java/net/minecraft/server/NetLoginHandler.java +++ b/src/main/java/net/minecraft/server/NetLoginHandler.java @@ -55,6 +55,12 @@ public class NetLoginHandler extends NetHandler { } public void a(Packet2Handshake packet2handshake) { + // CraftBukkit start - 1.3 detection + if (packet2handshake.a == null) { + disconnect("Outdated server!"); + return; + } + // CraftBukkit end // CraftBukkit start int i = packet2handshake.a.indexOf(';'); if (i == -1) { diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java index 003fe74eee..58a4f81389 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -52,7 +52,7 @@ public class NetworkManager { try { // CraftBukkit start - cant compile these outside the try socket.setSoTimeout(30000); - this.input = new DataInputStream(socket.getInputStream()); + this.input = new DataInputStream(new java.io.BufferedInputStream(socket.getInputStream(), 2)); // Remove buffered input after 1.3 this.output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), 5120)); } catch (java.io.IOException socketexception) { // CraftBukkit end @@ -146,6 +146,23 @@ public class NetworkManager { boolean flag = false; try { + // CraftBukkit start - 1.3 detection + this.input.mark(2); + if (this.input.read() == 2 && this.input.read() != 0) { + Packet.a(this.input, 16); + Packet.a(this.input, 255); + this.input.readInt(); + + if (this.q) { + return true; + } + + this.m.clear(); + this.m.add(new Packet2Handshake(null)); + return true; + } + this.input.reset(); + // CraftBukkit end Packet packet = Packet.a(this.input, this.packetListener.c()); if (packet != null) {