From 7d3aa33c25ac9250101ebe7692482d9f8a22c38b Mon Sep 17 00:00:00 2001 From: str4d Date: Tue, 10 Dec 2013 05:55:19 +0000 Subject: [PATCH] Fixed type argument problem causing infinite recursion --- .../src/org/klomp/snark/bencode/BEncoder.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/bencode/BEncoder.java b/apps/i2psnark/java/src/org/klomp/snark/bencode/BEncoder.java index 4cb55541f..517b10393 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/bencode/BEncoder.java +++ b/apps/i2psnark/java/src/org/klomp/snark/bencode/BEncoder.java @@ -155,7 +155,7 @@ public class BEncoder out.write(bs); } - public static byte[] bencode(Map m) + public static byte[] bencode(Map m) { try { @@ -169,23 +169,29 @@ public class BEncoder } } - public static void bencode(Map m, OutputStream out) throws IOException + public static void bencode(Map m, OutputStream out) + throws IOException, IllegalArgumentException { out.write('d'); // Keys must be sorted. XXX - But is this the correct order? - Set s = m.keySet(); - List l = new ArrayList(s); + Set s = m.keySet(); + List l = new ArrayList(s.size()); + for (Object k : s) { + // Keys must be Strings. + if (String.class.isAssignableFrom(k.getClass())) + l.add((String) k); + else + throw new IllegalArgumentException("Cannot bencode map: contains non-String key of type " + k.getClass()); + } Collections.sort(l); Iterator it = l.iterator(); while(it.hasNext()) { - // Keys must be Strings. String key = it.next(); - Object value = m.get(key); bencode(key, out); - bencode(value, out); + bencode(m.get(key), out); } out.write('e');