diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 817117611e..82bed01c66 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -900,13 +900,14 @@ public class I2PSnarkServlet extends Default { out.write(trackerLink); } + String encodedBaseName = urlEncode(snark.getBaseName()); // File type icon column out.write("\n"); if (isValid) { // Link to local details page - note that trailing slash on a single-file torrent // gets us to the details page instead of the file. StringBuilder buf = new StringBuilder(128); - buf.append(""); out.write(buf.toString()); @@ -929,7 +930,7 @@ public class I2PSnarkServlet extends Default { out.write(""); if (remaining == 0 || isMultiFile) { StringBuilder buf = new StringBuilder(128); - buf.append("").append(link).append(""); return buf.toString(); } + + /** @since 0.8.13 */ + private static String urlEncode(String s) { + return s.replace("&", "&").replace(" ", "%20").replace(":", "%3A").replace("/", "%2F").replace(";", "%3B"); + } private static final String DOCTYPE = "\n"; private static final String HEADER_A = ""); buf.append("
").append(_("Torrent file")).append(": ").append(snark.getName()); buf.append(""); + } else { + // shouldn't happen + buf.append("Not found
resource=\"").append(r.toString()) + .append("\"
base=\"").append(base) + .append("\"
torrent=\"").append(torrentName) + .append("\""); } if (ls == null) { // We are only showing the torrent info section @@ -2068,7 +2080,7 @@ private static class FetchAndAdd implements Runnable { //if (peerParam != null) // buf.append("\n"); buf.append(_("Torrent was not retrieved from {0}", urlify(_url))); - String link = _url.replace("&", "&").replace(" ", "%20").replace(":", "%3A").replace("/", "%2F"); + String link = urlEncode(_url); /**** FIXME ticket #575 buf.append(" - ["); buf.append(_("Retry"));