From 55addfc7391d06f51d17279ab998633d44f44ef6 Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 8 Feb 2016 17:30:01 +0000 Subject: [PATCH] Fix bug receiving datagrams on v3 sessions with UTF-8 IDs Add test for tag options --- .../src/net/i2p/sam/SAMv3DatagramServer.java | 16 +++++++++++++++- .../src/net/i2p/sam/client/SAMStreamSend.java | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3DatagramServer.java b/apps/sam/java/src/net/i2p/sam/SAMv3DatagramServer.java index 93fa6a9272..b5d4aa058c 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMv3DatagramServer.java +++ b/apps/sam/java/src/net/i2p/sam/SAMv3DatagramServer.java @@ -137,6 +137,7 @@ class SAMv3DatagramServer implements Handler { private static class MessageDispatcher implements Runnable { private final ByteArrayInputStream is; + private static final int MAX_LINE_LENGTH = 2*1024; public MessageDispatcher(byte[] buf) { this.is = new ByteArrayInputStream(buf) ; @@ -144,8 +145,21 @@ class SAMv3DatagramServer implements Handler { public void run() { try { - String header = DataHelper.readLine(is).trim(); + // not UTF-8 + //String header = DataHelper.readLine(is).trim(); // we cannot use SAMUtils.parseParams() here + final UTF8Reader reader = new UTF8Reader(is); + final StringBuilder buf = new StringBuilder(MAX_LINE_LENGTH); + int c; + int i = 0; + while ((c = reader.read()) != -1) { + if (++i > MAX_LINE_LENGTH) + throw new IOException("Line too long - max " + MAX_LINE_LENGTH); + if (c == '\n') + break; + buf.append((char)c); + } + String header = buf.toString(); StringTokenizer tok = new StringTokenizer(header, " "); if (tok.countTokens() < 3) { // This is not a correct message, for sure diff --git a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java index 21494c108a..30f0af0864 100644 --- a/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java +++ b/apps/sam/java/src/net/i2p/sam/client/SAMStreamSend.java @@ -513,6 +513,7 @@ public class SAMStreamSend { baos.write(DataHelper.getUTF8(" PROTOCOL=123 TO_PORT=5678")); else baos.write(DataHelper.getUTF8(" TO_PORT=5678")); + baos.write(DataHelper.getUTF8(" SEND_TAGS=19 TAG_THRESHOLD=13 EXPIRES=33 SEND_LEASESET=true")); } baos.write((byte) '\n'); baos.write(data, 0, read); -- GitLab