From 22c0b8e5243eb670121a0d06a1b12ac3bfa0e95c Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 21 Aug 2009 23:36:21 +0000 Subject: [PATCH] * profiles.jsp: Bulletproofing, less memory usage * Updates: Verify zip at startup before extracting * Wrapper: Take a couple fields out of the log so it's narrower --- installer/resources/wrapper.config | 8 ++++++-- router/java/src/net/i2p/router/Router.java | 7 ++++++- .../router/peermanager/ProfileOrganizerRenderer.java | 10 +++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/installer/resources/wrapper.config b/installer/resources/wrapper.config index 3f07e7c85..3fbe0375e 100644 --- a/installer/resources/wrapper.config +++ b/installer/resources/wrapper.config @@ -117,8 +117,12 @@ wrapper.logfile=$SYSTEM_java_io_tmpdir/wrapper.log # no need for a wrapper.java.additional line too. #wrapper.logfile=$INSTALL_PATH/wrapper.log -# Format of output for the log file. (See docs for formats) -wrapper.logfile.format=LPTM +# Format of output for the log file. +# The format consists of the tokens 'L' for log level, 'P' for prefix, 'D' for thread, +# 'T' for time, 'Z' for millisecond time, and 'M' for message +# Unfortunately the log timezone cannot be changed, see +# http://www.nabble.com/Log-message-timezone-td23651317.html +wrapper.logfile.format=TM # Log Level for log file output. (See docs for log levels) wrapper.logfile.loglevel=INFO diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index f49a38146..1b20bda9d 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -1109,7 +1109,11 @@ public class Router { return; } System.out.println("INFO: Update file exists [" + UPDATE_FILE + "] - installing"); - boolean ok = FileUtil.extractZip(updateFile, _context.getBaseDir()); + // verify the whole thing first + // we could remember this fails, and not bother restarting, but who cares... + boolean ok = FileUtil.verifyZip(updateFile); + if (ok) + ok = FileUtil.extractZip(updateFile, _context.getBaseDir()); if (ok) System.out.println("INFO: Update installed"); else @@ -1132,6 +1136,7 @@ public class Router { updateFile.deleteOnExit(); } } + // exit whether ok or not if (System.getProperty("wrapper.version") != null) System.out.println("INFO: Restarting after update"); else diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java index 1e3d71fc8..870e647c9 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java @@ -111,10 +111,11 @@ class ProfileOrganizerRenderer { if (isIntegrated) buf.append(", Integrated"); RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer); if (info != null) { - buf.append(" (").append(info.getCapabilities()); + // prevent HTML injection in the caps and version + buf.append(" (").append(DataHelper.stripHTML(info.getCapabilities())); String v = info.getOption("router.version"); if (v != null) - buf.append(' ').append(v); + buf.append(' ').append(DataHelper.stripHTML(v)); buf.append(')'); } @@ -153,6 +154,9 @@ class ProfileOrganizerRenderer { buf.append("profile"); buf.append(" +-\n"); buf.append(""); + // let's not build the whole page in memory (~500 bytes per peer) + out.write(buf.toString()); + buf.setLength(0); } buf.append(""); @@ -189,7 +193,7 @@ class ProfileOrganizerRenderer { buf.append(""); RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer); if (info != null) - buf.append("" + info.getCapabilities() + ""); + buf.append("").append(DataHelper.stripHTML(info.getCapabilities())).append(""); else buf.append(" "); buf.append("");