From b52e8d6b5c13b27787bcae75700a8671bc4ea7c8 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Tue, 25 Jun 2019 13:34:59 +0000
Subject: [PATCH] I2CP: Prevent sending message to a local meta destination

---
 .../java/src/net/i2p/router/client/ClientManager.java | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java
index 03be0de3eb..07f234f1d0 100644
--- a/router/java/src/net/i2p/router/client/ClientManager.java
+++ b/router/java/src/net/i2p/router/client/ClientManager.java
@@ -445,6 +445,15 @@ class ClientManager {
             Job j = new DistributeLocal(toDest, runner, sender, fromDest, payload, msgId, messageNonce);
             //_ctx.jobQueue().addJob(j);
             j.runJob();
+        } else if (!_metaDests.isEmpty() && _metaDests.contains(toDest)) {
+            // meta dests don't have runners but are local, and you can't send to them
+            ClientConnectionRunner sender = getRunner(fromDest);
+            if (sender == null) {
+                // sender went away
+                return;
+            }
+            int rc = MessageStatusMessage.STATUS_SEND_FAILURE_BAD_LEASESET;
+            sender.updateMessageDeliveryStatus(fromDest, msgId, messageNonce, rc);
         } else {
             // remote.  w00t
             if (_log.shouldLog(Log.DEBUG))
@@ -764,7 +773,7 @@ class ClientManager {
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Message received but we don't have a connection to " 
                               + dest + "/" + _msg.getDestinationHash() 
-                              + " currently.  DROPPED");
+                              + " currently.  DROPPED", new Exception());
             }
         }
     }
-- 
GitLab