From 4da8a91264e9abb0a41235215a226138c082185c Mon Sep 17 00:00:00 2001
From: zzz <zzz@i2pmail.org>
Date: Fri, 21 Feb 2025 13:50:39 -0500
Subject: [PATCH] CLI: Don't die on reseed test if one entry is bad

---
 .../i2p/router/networkdb/reseed/Reseeder.java    | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
index 4defb78528..6e50ffd077 100644
--- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
+++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
@@ -22,6 +22,7 @@ import java.util.StringTokenizer;
 import net.i2p.I2PAppContext;
 import net.i2p.crypto.SU3File;
 import net.i2p.data.Base64;
+import net.i2p.data.DataFormatException;
 import net.i2p.data.DataHelper;
 import net.i2p.data.Hash;
 import net.i2p.data.router.RouterInfo;
@@ -1288,14 +1289,21 @@ public class Reseeder {
                             throw new IOException("su3 file too old");
                         java.util.zip.ZipFile zipf = new java.util.zip.ZipFile(zip);
                         java.util.Enumeration<? extends java.util.zip.ZipEntry> entries = zipf.entries();
-                        int ri = 0, old = 0;
+                        int ri = 0, old = 0, bad = 0;
                         int oldver = 0, unreach = 0;
                         while (entries.hasMoreElements()) {
                             java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry) entries.nextElement();
                             RouterInfo r = new RouterInfo();
                             InputStream in = zipf.getInputStream(entry);
-                            r.readBytes(in);
-                            in.close();
+                            try {
+                                r.readBytes(in);
+                            } catch (DataFormatException dfe) {
+                                System.out.println("Bad entry " + entry.getName() + ": " + dfe);
+                                bad++;
+                                continue;
+                            } finally {
+                                in.close();
+                            }
                             if (r.getPublished() > cutoff)
                                 ri++;
                             else
@@ -1306,6 +1314,8 @@ public class Reseeder {
                                 unreach++;
                         }
                         zipf.close();
+                        if (bad > 0)
+                            System.out.println(bad + " bad entries");
                         if (old > 0) {
                             System.out.println("Test failed for " + host + ", returned " + old + " old router infos");
                             fail++;
-- 
GitLab