Skip to content

Commit eff302a

Browse files
Mauricio Narvaezmaunvz
authored andcommitted
Handle V4 base64 packets with line breaks gracefully
1 parent a74a556 commit eff302a

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

engine.io-server/src/main/java/io/socket/engineio/server/parser/ParserV4.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ public Packet<?> decodePacket(Object data) {
114114
final String stringData = (String) data;
115115
if(stringData.charAt(0) == 'b') {
116116
final Packet<byte[]> packet = new Packet<>(Packet.MESSAGE);
117-
packet.data = java.util.Base64.getDecoder().decode(stringData.substring(1));
117+
// Ignore line breaks, added by engine.io-client-java during base64 encode
118+
packet.data = java.util.Base64.getDecoder().decode(stringData.substring(1).replace("\n", ""));
118119
return packet;
119120
} else {
120121
final Packet<String> packet = new Packet<>(PACKETS_REVERSE.get(

engine.io-server/src/test/java/io/socket/engineio/server/parser/ParserV4Test.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,16 @@ public void testDecodePacket_base64() {
204204
assertEquals(byte[].class, packetDecoded.data.getClass());
205205
assertArrayEquals(packetOriginal.data, (byte[]) packetDecoded.data);
206206
});
207+
208+
// Other socket.io libraries may add a line break to their base64 encoded output
209+
final Packet<byte[]> packetOriginalLineBreak = new Packet<>(Packet.MESSAGE, "Engine.IO".getBytes(StandardCharsets.UTF_8));
210+
Parser.PROTOCOL_V4.encodePacket(packetOriginalLineBreak, false, data -> {
211+
data += "\n";
212+
Packet<?> packetDecoded = Parser.PROTOCOL_V4.decodePacket(data);
213+
assertEquals(Packet.MESSAGE, packetDecoded.type);
214+
assertEquals(byte[].class, packetDecoded.data.getClass());
215+
assertArrayEquals(packetOriginal.data, (byte[]) packetDecoded.data);
216+
});
207217
}
208218

209219
@Test(expected = IllegalArgumentException.class)
@@ -301,4 +311,4 @@ public void testDecodePayload_exit() {
301311
});
302312
});
303313
}
304-
}
314+
}

0 commit comments

Comments
 (0)