From ec1380dfa149eeadf2d8ac4794d66352163a8951 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 29 Oct 2014 14:11:41 +0000 Subject: [PATCH] i2psnark: Convert '+' to ' ' in magnet dn param --- .../java/src/org/klomp/snark/MagnetURI.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/MagnetURI.java b/apps/i2psnark/java/src/org/klomp/snark/MagnetURI.java index 60698a091..dadba5849 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/MagnetURI.java +++ b/apps/i2psnark/java/src/org/klomp/snark/MagnetURI.java @@ -175,18 +175,25 @@ public class MagnetURI { } /** - * Decode %xx encoding, convert to UTF-8 if necessary - * Copied from i2ptunnel LocalHTTPServer + * Decode %xx encoding, convert to UTF-8 if necessary. + * Copied from i2ptunnel LocalHTTPServer. + * Also converts '+' to ' ' so the dn parameter comes out right + * These are coming in via a application/x-www-form-urlencoded form so + * the pluses are in there... + * hopefully any real + is encoded as %2B. + * * @since 0.9.1 */ private static String decode(String s) { - if (!s.contains("%")) + if (!(s.contains("%") || s.contains("+"))) return s; StringBuilder buf = new StringBuilder(s.length()); boolean utf8 = false; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); - if (c != '%') { + if (c == '+') { + buf.append(' '); + } else if (c != '%') { buf.append(c); } else { try {