diff --git a/engine.io-server/src/main/java/io/socket/engineio/server/parser/ParserV4.java b/engine.io-server/src/main/java/io/socket/engineio/server/parser/ParserV4.java index 10af06e..befc860 100644 --- a/engine.io-server/src/main/java/io/socket/engineio/server/parser/ParserV4.java +++ b/engine.io-server/src/main/java/io/socket/engineio/server/parser/ParserV4.java @@ -114,7 +114,8 @@ public Packet decodePacket(Object data) { final String stringData = (String) data; if(stringData.charAt(0) == 'b') { final Packet packet = new Packet<>(Packet.MESSAGE); - packet.data = java.util.Base64.getDecoder().decode(stringData.substring(1)); + // Ignore line breaks, added by engine.io-client-java during base64 encode + packet.data = java.util.Base64.getDecoder().decode(stringData.substring(1).replace("\n", "")); return packet; } else { final Packet packet = new Packet<>(PACKETS_REVERSE.get( diff --git a/engine.io-server/src/test/java/io/socket/engineio/server/parser/ParserV4Test.java b/engine.io-server/src/test/java/io/socket/engineio/server/parser/ParserV4Test.java index 1cc04b5..d63397d 100644 --- a/engine.io-server/src/test/java/io/socket/engineio/server/parser/ParserV4Test.java +++ b/engine.io-server/src/test/java/io/socket/engineio/server/parser/ParserV4Test.java @@ -204,6 +204,16 @@ public void testDecodePacket_base64() { assertEquals(byte[].class, packetDecoded.data.getClass()); assertArrayEquals(packetOriginal.data, (byte[]) packetDecoded.data); }); + + // Other socket.io libraries may add a line break to their base64 encoded output + final Packet packetOriginalLineBreak = new Packet<>(Packet.MESSAGE, "Engine.IO".getBytes(StandardCharsets.UTF_8)); + Parser.PROTOCOL_V4.encodePacket(packetOriginalLineBreak, false, data -> { + data += "\n"; + Packet packetDecoded = Parser.PROTOCOL_V4.decodePacket(data); + assertEquals(Packet.MESSAGE, packetDecoded.type); + assertEquals(byte[].class, packetDecoded.data.getClass()); + assertArrayEquals(packetOriginal.data, (byte[]) packetDecoded.data); + }); } @Test(expected = IllegalArgumentException.class) @@ -301,4 +311,4 @@ public void testDecodePayload_exit() { }); }); } -} \ No newline at end of file +}