diff --git a/apps/routerconsole/jsp/error500.jsp b/apps/routerconsole/jsp/error500.jsp index 70e82e9d2d97649bed3fcfba5f9f28f1296c92a1..223b4d5de3fe5aa201f8afa3916be48da32e5d2b 100644 --- a/apps/routerconsole/jsp/error500.jsp +++ b/apps/routerconsole/jsp/error500.jsp @@ -45,11 +45,11 @@ </p><p> <% if (ERROR_THROWABLE != null) { - java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(2048); - java.io.PrintStream ps = new java.io.PrintStream(baos); - ERROR_THROWABLE.printStackTrace(ps); - ps.close(); - String trace = baos.toString(); + java.io.StringWriter sw = new java.io.StringWriter(2048); + java.io.PrintWriter pw = new java.io.PrintWriter(sw); + ERROR_THROWABLE.printStackTrace(pw); + pw.flush(); + String trace = sw.toString(); trace = trace.replace("&", "&").replace("<", "<").replace(">", ">"); trace = trace.replace("\n", "<br> \n"); out.print(trace); diff --git a/core/java/src/net/i2p/client/naming/SingleFileNamingService.java b/core/java/src/net/i2p/client/naming/SingleFileNamingService.java index 6414f64b45493a7032f2f1c0d7072446c4b13220..c331fae01ed25a3a74f4b253918dba6866eff157 100644 --- a/core/java/src/net/i2p/client/naming/SingleFileNamingService.java +++ b/core/java/src/net/i2p/client/naming/SingleFileNamingService.java @@ -28,6 +28,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import net.i2p.I2PAppContext; import net.i2p.data.DataFormatException; +import net.i2p.data.DataHelper; import net.i2p.data.Destination; import net.i2p.util.FileUtil; import net.i2p.util.Log; @@ -235,7 +236,7 @@ public class SingleFileNamingService extends NamingService { // FIXME fails if previous last line didn't have a trailing \n out.write(hostname.getBytes("UTF-8")); out.write('='); - out.write(d.toBase64().getBytes()); + out.write(DataHelper.getASCII(d.toBase64())); out.write('\n'); out.close(); for (NamingServiceListener nsl : _listeners) { diff --git a/core/java/src/net/i2p/stat/RateStat.java b/core/java/src/net/i2p/stat/RateStat.java index 512fd64027a9d6a5aec692aff2f800ed4f05301a..018ef1973404de23a9806a6bdbe405fa6873dde1 100644 --- a/core/java/src/net/i2p/stat/RateStat.java +++ b/core/java/src/net/i2p/stat/RateStat.java @@ -184,7 +184,7 @@ public class RateStat { buf.append("# Rate: ").append(_groupName).append(": ").append(_statName).append(NL); buf.append("# ").append(_description).append(NL); buf.append("# ").append(NL).append(NL); - out.write(buf.toString().getBytes()); + out.write(buf.toString().getBytes("UTF-8")); buf.setLength(0); for (Rate r: _rates){ buf.append("#######").append(NL); @@ -193,7 +193,7 @@ public class RateStat { buf.append(NL); String curPrefix = prefix + "." + DataHelper.formatDuration(r.getPeriod()); r.store(curPrefix, buf); - out.write(buf.toString().getBytes()); + out.write(buf.toString().getBytes("UTF-8")); buf.setLength(0); } } diff --git a/core/java/src/net/i2p/util/HexDump.java b/core/java/src/net/i2p/util/HexDump.java index 0d56d2f981c1c691bad35c1a3541acc9c8b3b359..9765f3317b0c5c79659a9c2aa82ba18757865e82 100644 --- a/core/java/src/net/i2p/util/HexDump.java +++ b/core/java/src/net/i2p/util/HexDump.java @@ -13,6 +13,8 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import net.i2p.data.DataHelper; + /** * Hexdump class (well, it's actually a namespace with some functions, * but let's stick with java terminology :-). These methods generate @@ -25,7 +27,7 @@ public class HexDump { private static final int FORMAT_OFFSET_PADDING = 8; private static final int FORMAT_BYTES_PER_ROW = 16; - private static final byte[] HEXCHARS = "0123456789abcdef".getBytes(); + private static final byte[] HEXCHARS = DataHelper.getASCII("0123456789abcdef"); /** * Dump a byte array in a String. @@ -37,11 +39,10 @@ public class HexDump { try { dump(data, 0, data.length, out); + return out.toString("ISO-8859-1"); } catch (IOException e) { - e.printStackTrace(); + throw new RuntimeException("no 8859?", e); } - - return out.toString(); } /** @@ -56,11 +57,10 @@ public class HexDump { try { dump(data, off, len, out); + return out.toString("ISO-8859-1"); } catch (IOException e) { - e.printStackTrace(); + throw new RuntimeException("no 8859?", e); } - - return out.toString(); } /** @@ -91,9 +91,10 @@ public class HexDump { hexoff = Integer.toString(dumpoff, 16); hexofflen = hexoff.length(); for (i = 0; i < FORMAT_OFFSET_PADDING - hexofflen; ++i) { - hexoff = "0" + hexoff; + out.write('0'); } - out.write((hexoff + " ").getBytes()); + out.write(DataHelper.getASCII(hexoff)); + out.write(' '); // Bytes to be printed in the current line nextbytes = (FORMAT_BYTES_PER_ROW < (end - dumpoff) ? FORMAT_BYTES_PER_ROW : (end - dumpoff)); @@ -101,15 +102,15 @@ public class HexDump { for (i = 0; i < FORMAT_BYTES_PER_ROW; ++i) { // Put two spaces to separate 8-bytes blocks if ((i % 8) == 0) { - out.write(" ".getBytes()); + out.write(' '); } if (i >= nextbytes) { - out.write(" ".getBytes()); + out.write(DataHelper.getASCII(" ")); } else { val = data[dumpoff + i] & 0xff; out.write(HEXCHARS[val >>> 4]); out.write(HEXCHARS[val & 0xf]); - out.write(" ".getBytes()); + out.write(' '); } } @@ -117,19 +118,32 @@ public class HexDump { for (i = 0; i < FORMAT_BYTES_PER_ROW; ++i) { if (i >= nextbytes) { - out.write(" ".getBytes()); + out.write(' '); } else { val = data[i + dumpoff]; // Is it a printable character? if ((val > 31) && (val < 127)) { out.write(val); } else { - out.write(".".getBytes()); + out.write('.'); } } } - out.write("|\n".getBytes()); + out.write('|'); + out.write('\n'); } } -} \ No newline at end of file + + /** + * @since 0.9.21 + */ +/**** + public static void main(String[] args) { + byte[] b = new byte[9993]; + RandomSource.getInstance().nextBytes(b); + System.out.println(dump(b)); + System.out.println(dump("test test test abcde xyz !!!".getBytes())); + } +****/ +} diff --git a/core/java/src/net/i2p/util/LogRecordFormatter.java b/core/java/src/net/i2p/util/LogRecordFormatter.java index 4f367defe90b40232ccade986cf54e26ca418205..05d04b92be711adc1606eba2c2329d4356b4cdeb 100644 --- a/core/java/src/net/i2p/util/LogRecordFormatter.java +++ b/core/java/src/net/i2p/util/LogRecordFormatter.java @@ -73,9 +73,9 @@ class LogRecordFormatter { buf.append(NL); if (rec.getThrowable() != null) { StringWriter sw = new StringWriter(512); - PrintWriter pw = new PrintWriter(sw, true); + PrintWriter pw = new PrintWriter(sw); rec.getThrowable().printStackTrace(pw); - sw.flush(); + pw.flush(); buf.append(sw.toString()); } return buf.toString(); diff --git a/router/java/src/net/i2p/router/peermanager/DBHistory.java b/router/java/src/net/i2p/router/peermanager/DBHistory.java index c5c94c2ca85a06f40cbbc6d16f5e1ea2829cf92d..b2b46faca3dae1f8b8739dc7121bb182e1d4444d 100644 --- a/router/java/src/net/i2p/router/peermanager/DBHistory.java +++ b/router/java/src/net/i2p/router/peermanager/DBHistory.java @@ -228,7 +228,7 @@ public class DBHistory { add(buf, "unpromptedDbStoreOld", _unpromptedDbStoreOld, "How times have they sent us something we didn't ask for but have seen before?"); add(buf, "lastLookupReceived", _lastLookupReceived, "When was the last time they send us a lookup? (milliseconds since the epoch)"); add(buf, "avgDelayBetweenLookupsReceived", _avgDelayBetweenLookupsReceived, "How long is it typically between each db lookup they send us? (in milliseconds)"); - out.write(buf.toString().getBytes()); + out.write(buf.toString().getBytes("UTF-8")); _failedLookupRate.store(out, "dbHistory.failedLookupRate"); _invalidReplyRate.store(out, "dbHistory.invalidReplyRate"); } diff --git a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java index 32c15038c0f25a7e470df1a45a20ac01de941922..305d0f343454323036ee3f1c51371f544866a5ec 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java +++ b/router/java/src/net/i2p/router/peermanager/ProfilePersistenceHelper.java @@ -139,7 +139,7 @@ class ProfilePersistenceHelper { add(buf, "tunnelPeakTunnel1mThroughput", profile.getPeakTunnel1mThroughputKBps(), "KBytes/sec"); buf.append(NL); - out.write(buf.toString().getBytes()); + out.write(buf.toString().getBytes("UTF-8")); if (profile.getIsExpanded()) { // only write out expanded data if, uh, we've got it diff --git a/router/java/src/net/i2p/router/peermanager/TunnelHistory.java b/router/java/src/net/i2p/router/peermanager/TunnelHistory.java index 8cffc431f6dccd23809b602b63bc4e201f8aec7e..37e91b3f297a53005d6e8046e02fd3fb0796af3f 100644 --- a/router/java/src/net/i2p/router/peermanager/TunnelHistory.java +++ b/router/java/src/net/i2p/router/peermanager/TunnelHistory.java @@ -151,7 +151,7 @@ public class TunnelHistory { add(buf, "lifetimeAgreedTo", _lifetimeAgreedTo.get(), "How many tunnels has the peer ever agreed to participate in?"); add(buf, "lifetimeFailed", _lifetimeFailed.get(), "How many tunnels has the peer ever agreed to participate in that failed prematurely?"); add(buf, "lifetimeRejected", _lifetimeRejected.get(), "How many tunnels has the peer ever refused to participate in?"); - out.write(buf.toString().getBytes()); + out.write(buf.toString().getBytes("UTF-8")); _rejectRate.store(out, "tunnelHistory.rejectRate"); _failRate.store(out, "tunnelHistory.failRate"); } diff --git a/router/java/src/net/i2p/router/startup/WorkingDir.java b/router/java/src/net/i2p/router/startup/WorkingDir.java index b8503224f6f2cc0d1b14064a20f43b48a5046649..8e3a19c93fdfe3a3d984687326a7f97b9c63df82 100644 --- a/router/java/src/net/i2p/router/startup/WorkingDir.java +++ b/router/java/src/net/i2p/router/startup/WorkingDir.java @@ -252,7 +252,7 @@ public class WorkingDir { } System.setProperty(PROP_WRAPPER_LOG, logfile.getAbsolutePath()); try { - PrintStream ps = new PrintStream(new SecureFileOutputStream(logfile, true)); + PrintStream ps = new PrintStream(new SecureFileOutputStream(logfile, true), true, "UTF-8"); System.setOut(ps); System.setErr(ps); } catch (IOException ioe) { diff --git a/router/java/src/net/i2p/router/tasks/MarkLiveliness.java b/router/java/src/net/i2p/router/tasks/MarkLiveliness.java index 00bba1a5bdac4faf20431d47035a761e6d59ad0b..34420f2d97b3815d1bee01aba8e537528e0bbba1 100644 --- a/router/java/src/net/i2p/router/tasks/MarkLiveliness.java +++ b/router/java/src/net/i2p/router/tasks/MarkLiveliness.java @@ -12,6 +12,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import net.i2p.data.DataHelper; import net.i2p.router.Router; import net.i2p.util.Log; import net.i2p.util.SecureFileOutputStream; @@ -45,7 +46,7 @@ public class MarkLiveliness implements SimpleTimer.TimedEvent { FileOutputStream fos = null; try { fos = new SecureFileOutputStream(_pingFile); - fos.write(Long.toString(System.currentTimeMillis()).getBytes()); + fos.write(DataHelper.getASCII(Long.toString(System.currentTimeMillis()))); } catch (IOException ioe) { if (!_errorLogged) { Log log = _router.getContext().logManager().getLog(MarkLiveliness.class);