From cc6247fe7e77885ba3d51d23c9a2cf5a23d49406 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 19 Aug 2020 14:50:58 +0000
Subject: [PATCH] findbugs all over

---
 .../net/i2p/i2pcontrol/security/KeyStoreProvider.java     | 7 +++++--
 .../java/src/net/i2p/router/sybil/Analysis.java           | 2 --
 .../java/src/net/i2p/router/web/helpers/HomeHelper.java   | 2 +-
 apps/routerconsole/jsp/configplugins.jsp                  | 4 ++--
 apps/routerconsole/jsp/configreseed.jsp                   | 4 ++--
 apps/routerconsole/jsp/viewstat.jsp                       | 5 +++++
 .../src/net/i2p/client/streaming/impl/Connection.java     | 1 -
 apps/susimail/src/src/i2p/susi/webmail/WebMail.java       | 8 ++++----
 core/java/src/net/i2p/data/PrivateKeyFile.java            | 1 -
 router/java/src/net/i2p/router/RouterVersion.java         | 2 +-
 .../net/i2p/router/crypto/ratchet/ECIESAEADEngine.java    | 3 ++-
 .../src/net/i2p/router/crypto/ratchet/RatchetSKM.java     | 1 -
 .../router/message/OutboundClientMessageOneShotJob.java   | 2 +-
 .../src/net/i2p/router/tunnel/pool/TunnelPoolManager.java | 1 -
 14 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/apps/i2pcontrol/java/net/i2p/i2pcontrol/security/KeyStoreProvider.java b/apps/i2pcontrol/java/net/i2p/i2pcontrol/security/KeyStoreProvider.java
index 544f38b8fa..1b771d0934 100644
--- a/apps/i2pcontrol/java/net/i2p/i2pcontrol/security/KeyStoreProvider.java
+++ b/apps/i2pcontrol/java/net/i2p/i2pcontrol/security/KeyStoreProvider.java
@@ -186,17 +186,18 @@ public class KeyStoreProvider {
         if (_keystore == null) {
             File keyStoreFile = new File(getKeyStoreLocation());
 
+            InputStream is = null;
             try {
                 _keystore = KeyStore.getInstance(KeyStore.getDefaultType());
                 if (keyStoreFile.exists()) {
-                    InputStream is = new FileInputStream(keyStoreFile);
+                    is = new FileInputStream(keyStoreFile);
                     _keystore.load(is, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
                     return _keystore;
                 }
 
                 initialize();
                 if (keyStoreFile.exists()) {
-                    InputStream is = new FileInputStream(keyStoreFile);
+                    is = new FileInputStream(keyStoreFile);
                     _keystore.load(is, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
                     return _keystore;
                 } else {
@@ -204,6 +205,8 @@ public class KeyStoreProvider {
                 }
             } catch (Exception e) {
                 // Ignore. Not an issue. Let's just create a new keystore instead.
+            } finally {
+                if (is != null) try { is.close(); } catch (IOException ioe) {}
             }
             return null;
         } else {
diff --git a/apps/routerconsole/java/src/net/i2p/router/sybil/Analysis.java b/apps/routerconsole/java/src/net/i2p/router/sybil/Analysis.java
index 5cc33969fc..60a65b6217 100644
--- a/apps/routerconsole/java/src/net/i2p/router/sybil/Analysis.java
+++ b/apps/routerconsole/java/src/net/i2p/router/sybil/Analysis.java
@@ -323,8 +323,6 @@ public class Analysis extends JobImpl implements RouterApp {
         if (_log.shouldWarn())
             _log.warn("Analyzing " + ris.size() + " routers, including non-floodfills? " + includeAll);
 
-        double avgMinDist = getAvgMinDist(ris);
-
         // IP analysis
         calculateIPGroupsFamily(ris, points);
         List<RouterInfo> ri32 = new ArrayList<RouterInfo>(4);
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java
index 14ef78cc56..3fdb753c82 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/helpers/HomeHelper.java
@@ -34,7 +34,7 @@ public class HomeHelper extends HelperBase {
     static final String PROP_MONITORING = "routerconsole.monitoring";
     static final String PROP_OLDHOME = "routerconsole.oldHomePage";
     private static final String PROP_SEARCH = "routerconsole.showSearch";
-    public final String bottomWrap = "<br>\n" +
+    private static final String bottomWrap = "<br>\n" +
             "<div class=\"clearer\">&nbsp;</div>\n" +
                 "</div>\n" + 
                 "</div>\n";
diff --git a/apps/routerconsole/jsp/configplugins.jsp b/apps/routerconsole/jsp/configplugins.jsp
index 29911facd3..23004bcde3 100644
--- a/apps/routerconsole/jsp/configplugins.jsp
+++ b/apps/routerconsole/jsp/configplugins.jsp
@@ -60,7 +60,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
  <b>URL:</b>
 <%
    String url = request.getParameter("pluginURL");
-   String value = url != null ? "value=\"" + url + '"' : "";
+   String value = url != null ? "value=\"" + net.i2p.data.DataHelper.escapeHTML(url) + '"' : "";
 %>
  <input type="text" size="60" name="pluginURL" title="<%=intl._t("To install a plugin, enter the download URL:")%>" <%=value%>>
 </td>
@@ -84,7 +84,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
    String file = request.getParameter("pluginFile");
    if (file != null && file.length() > 0) {
 %>
-<input type="text" size="60" name="pluginFile" value="<%=file%>">
+<input type="text" size="60" name="pluginFile" value="<%=net.i2p.data.DataHelper.escapeHTML(file)%>">
 <%
    } else {
 %>
diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp
index 7443851f2e..44672c023d 100644
--- a/apps/routerconsole/jsp/configreseed.jsp
+++ b/apps/routerconsole/jsp/configreseed.jsp
@@ -70,7 +70,7 @@
 <b><%=intl._t("Enter zip or su3 URL")%>:</b>
 <%
    String url = request.getParameter("url");
-   String value = url != null ? "value=\"" + url + '"' : "";
+   String value = url != null ? "value=\"" + net.i2p.data.DataHelper.escapeHTML(url) + '"' : "";
 %>
 <input name="url" type="text" size="60" <%=value%> />
   </td>
@@ -93,7 +93,7 @@
    String file = request.getParameter("file");
    if (file != null && file.length() > 0) {
 %>
-<input type="text" size="60" name="file" value="<%=file%>">
+<input type="text" size="60" name="file" value="<%=net.i2p.data.DataHelper.escapeHTML(file)%>">
 <%
    } else {
 %>
diff --git a/apps/routerconsole/jsp/viewstat.jsp b/apps/routerconsole/jsp/viewstat.jsp
index 2876e2b753..fdce14bfa3 100644
--- a/apps/routerconsole/jsp/viewstat.jsp
+++ b/apps/routerconsole/jsp/viewstat.jsp
@@ -38,6 +38,11 @@ if ( !rendered && ((rs != null) || fakeBw) ) {
     if (!fakeBw)
       rate = rs.getRate(per);
     if ( (rate != null) || (fakeBw) ) {
+      if (stat != null &&
+          (stat.indexOf('\n') >= 0 || stat.indexOf('\r') >= 0)) {
+          response.sendError(403, "param");
+          return;
+      }
       java.io.OutputStream cout = response.getOutputStream();
       String format = request.getParameter("format");
       response.setHeader("X-Content-Type-Options", "nosniff");
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/Connection.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/Connection.java
index 898e2bbbdb..9698ec9d0f 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/impl/Connection.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/Connection.java
@@ -1656,7 +1656,6 @@ class Connection {
                 return false;
             }
 
-            long now = _context.clock().now();
                _context.statManager().addRateData("stream.fastRetransmit", _packet.getLifetime(), _packet.getLifetime());
                 
                 // revamp various fields, in case we need to ack more, etc
diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
index 50e1ae5114..49536ac866 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
@@ -3092,10 +3092,10 @@ public class WebMail extends HttpServlet
 	 */
 	private static void showLogin( PrintWriter out )
 	{
-		boolean fixed = Boolean.parseBoolean(Config.getProperty( CONFIG_PORTS_FIXED, "true" ));
-		String host = Config.getProperty(CONFIG_HOST, DEFAULT_HOST);
-		String pop3 = Config.getProperty(CONFIG_PORTS_POP3, Integer.toString(DEFAULT_POP3PORT));
-		String smtp = Config.getProperty(CONFIG_PORTS_SMTP, Integer.toString(DEFAULT_SMTPPORT));
+		//boolean fixed = Boolean.parseBoolean(Config.getProperty( CONFIG_PORTS_FIXED, "true" ));
+		//String host = Config.getProperty(CONFIG_HOST, DEFAULT_HOST);
+		//String pop3 = Config.getProperty(CONFIG_PORTS_POP3, Integer.toString(DEFAULT_POP3PORT));
+		//String smtp = Config.getProperty(CONFIG_PORTS_SMTP, Integer.toString(DEFAULT_SMTPPORT));
 
 		out.println( "<div id=\"dologin\"><h1>" + _t("Email Login") + "</h1><table cellspacing=\"3\" cellpadding=\"5\">\n" +
 			// current postman hq length limits 16/12, new postman version 32/32
diff --git a/core/java/src/net/i2p/data/PrivateKeyFile.java b/core/java/src/net/i2p/data/PrivateKeyFile.java
index 4fdcd32c21..b6db55fa7f 100644
--- a/core/java/src/net/i2p/data/PrivateKeyFile.java
+++ b/core/java/src/net/i2p/data/PrivateKeyFile.java
@@ -967,7 +967,6 @@ public class PrivateKeyFile {
             SigType type = spk.getType();
             if (type == SigType.EdDSA_SHA512_Ed25519 ||
                 type == SigType.RedDSA_SHA512_Ed25519) {
-                I2PAppContext ctx = I2PAppContext.getGlobalContext();
                 s.append("\nBlinded B32: ").append(Blinding.encode(spk));
                 s.append("\n + auth key: ").append(Blinding.encode(spk, false, true));
                 s.append("\n + password: ").append(Blinding.encode(spk, true, false));
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index cef5686075..59b43357e5 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 12;
+    public final static long BUILD = 13;
 
     /** for example "-test" */
     public final static String EXTRA = "-rc";
diff --git a/router/java/src/net/i2p/router/crypto/ratchet/ECIESAEADEngine.java b/router/java/src/net/i2p/router/crypto/ratchet/ECIESAEADEngine.java
index e8382df414..feca72994d 100644
--- a/router/java/src/net/i2p/router/crypto/ratchet/ECIESAEADEngine.java
+++ b/router/java/src/net/i2p/router/crypto/ratchet/ECIESAEADEngine.java
@@ -190,7 +190,6 @@ public final class ECIESAEADEngine {
         RatchetSessionTag st = new RatchetSessionTag(tag);
         SessionKeyAndNonce key = keyManager.consumeTag(st);
         CloveSet decrypted;
-        final boolean shouldDebug = _log.shouldDebug();
         if (key != null) {
             decrypted = xx_decryptFast(tag, st, key, data, targetPrivateKey, keyManager);
             // we do NOT retry as NS
@@ -957,9 +956,11 @@ public final class ECIESAEADEngine {
     /**
      * No ad
      */
+/*
     private final byte[] encryptAEADBlock(byte data[], SessionKey key, long n) {
         return encryptAEADBlock(null, data, key, n);
     }
+*/
 
     /**
      *
diff --git a/router/java/src/net/i2p/router/crypto/ratchet/RatchetSKM.java b/router/java/src/net/i2p/router/crypto/ratchet/RatchetSKM.java
index aa0880b2ce..3c8a1005d1 100644
--- a/router/java/src/net/i2p/router/crypto/ratchet/RatchetSKM.java
+++ b/router/java/src/net/i2p/router/crypto/ratchet/RatchetSKM.java
@@ -1157,7 +1157,6 @@ public class RatchetSKM extends SessionKeyManager implements SessionTagListener
                     _hisIBKey = receivedKey;
 
                     // create new OB TS, delete old one
-                    PublicKey pub = nextKeys.getPublic();
                     PrivateKey priv = nextKeys.getPrivate();
                     PrivateKey sharedSecret = ECIESAEADEngine.doDH(priv, key);
                     byte[] sk = new byte[32];
diff --git a/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java b/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java
index 7250c08945..5c996400c7 100644
--- a/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java
+++ b/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java
@@ -1196,7 +1196,7 @@ public class OutboundClientMessageOneShotJob extends JobImpl {
         }
 
         public void onReply() {
-            runJob();
+            super.runJob();
         }
     }
     
diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java
index b005951372..15c9d347dc 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java
@@ -562,7 +562,6 @@ public class TunnelPoolManager implements TunnelManagerFacade {
             (!_context.getBooleanPropertyDefaultTrue("router.disableTunnelTesting") ||
              _context.router().isHidden() ||
              _context.router().getRouterInfo().getAddressCount() <= 0)) {
-            Hash client = cfg.getDestination();
             TunnelPool pool = cfg.getTunnelPool();
             _context.jobQueue().addJob(new TestJob(_context, cfg, pool));
         }
-- 
GitLab