From 7d3aa33c25ac9250101ebe7692482d9f8a22c38b Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> 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 4cb55541ff..517b103938 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<String, Object> m) + public static byte[] bencode(Map<?, ?> m) { try { @@ -169,23 +169,29 @@ public class BEncoder } } - public static void bencode(Map<String, Object> 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<String> s = m.keySet(); - List<String> l = new ArrayList<String>(s); + Set<?> s = m.keySet(); + List<String> l = new ArrayList<String>(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<String> 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'); -- GitLab