Skip to content

Commit 19a185f

Browse files
committed
remove null bytes from encoded strings
1 parent 7bc54c5 commit 19a185f

File tree

5 files changed

+16
-10
lines changed

5 files changed

+16
-10
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ buildscript {
1010

1111
apply plugin: 'foxloader.dev'
1212

13-
version '1.2.0'
13+
version '1.2.1'
1414

1515
foxloader {
1616
// forceReload = true

src/server/java/io/thiemann/kurt/query/query/AbstractQueryServer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public abstract class AbstractQueryServer {
1515

1616
public AbstractQueryServer(int port, InetAddress laddr) throws SocketException {
1717
this.socket = new DatagramSocket(port, laddr);
18+
this.socket.setSoTimeout(5000);
1819
this.thread = new Thread(this::run);
1920
this.thread.start();
2021

src/server/java/io/thiemann/kurt/query/query/packet/ClientBoundBasicStatPacket.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ protected byte[] serializePayload() {
3131
ByteBuffer buffer = ByteBuffer.allocate(1024);
3232
buffer.order(ByteOrder.LITTLE_ENDIAN);
3333

34-
buffer.put((this.motd + "\0").getBytes(StandardCharsets.UTF_8));
35-
buffer.put((this.gameType + "\0").getBytes(StandardCharsets.UTF_8));
36-
buffer.put((this.map + "\0").getBytes(StandardCharsets.UTF_8));
37-
buffer.put((this.playersOnline + "\0").getBytes(StandardCharsets.UTF_8));
38-
buffer.put((this.maxPlayers + "\0").getBytes(StandardCharsets.UTF_8));
34+
buffer.put(this.encodeString(this.motd));
35+
buffer.put(this.encodeString(this.gameType));
36+
buffer.put(this.encodeString(this.map));
37+
buffer.put(this.encodeString(Integer.toString(this.playersOnline)));
38+
buffer.put(this.encodeString(Integer.toString(this.maxPlayers)));
3939
buffer.putShort((short) this.port);
40-
buffer.put((this.host + "\0").getBytes(StandardCharsets.UTF_8));
40+
buffer.put(this.encodeString(this.host));
4141

4242
//only return written length as byte array
4343
byte[] response = new byte[buffer.position()];

src/server/java/io/thiemann/kurt/query/query/packet/ClientBoundFullStatPacket.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public ClientBoundFullStatPacket(int sessionId, String hostName, String gameType
3434
}
3535

3636
private void putKV(String key, String value, ByteBuffer buffer) {
37-
buffer.put((key + "\0").getBytes(StandardCharsets.UTF_8));
38-
buffer.put((value + "\0").getBytes(StandardCharsets.UTF_8));
37+
buffer.put(this.encodeString(key));
38+
buffer.put(this.encodeString(value));
3939
}
4040

4141
@Override
@@ -58,7 +58,7 @@ protected byte[] serializePayload() {
5858
buffer.put(new byte[]{0x01, 0x70, 0x6C, 0x61, 0x79, 0x65, 0x72, 0x5F, 0x00, 0x00});
5959

6060
for (String player : this.players) {
61-
buffer.put((player + "\0").getBytes(StandardCharsets.UTF_8));
61+
buffer.put(this.encodeString(player));
6262
}
6363
buffer.put((byte) 0);
6464

src/server/java/io/thiemann/kurt/query/query/packet/ClientBoundPacket.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.nio.ByteBuffer;
44
import java.nio.ByteOrder;
5+
import java.nio.charset.StandardCharsets;
56

67
public abstract class ClientBoundPacket {
78
private final PacketType type;
@@ -23,6 +24,10 @@ public int getSessionId() {
2324

2425
protected abstract byte[] serializePayload();
2526

27+
protected byte[] encodeString(String s) {
28+
return (s.replace("\0", "") + "\0").getBytes(StandardCharsets.UTF_8);
29+
}
30+
2631
public byte[] serialize() {
2732
byte[] payload = serializePayload();
2833
ByteBuffer buffer = ByteBuffer.allocate(5 + payload.length);

0 commit comments

Comments
 (0)