From e9f27c60ddbd8cc0b5f3229e6676b0838797be2f Mon Sep 17 00:00:00 2001 From: zzz Date: Thu, 4 Dec 2008 00:09:52 +0000 Subject: [PATCH] avoid two NPEs on corrupt fragments --- router/java/src/net/i2p/router/tunnel/FragmentHandler.java | 2 ++ router/java/src/net/i2p/router/tunnel/FragmentedMessage.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java index 063744001..5a97956b9 100644 --- a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java +++ b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java @@ -372,6 +372,8 @@ public class FragmentHandler { int fragmentCount = msg.getFragmentCount(); // toByteArray destroys the contents of the message completely byte data[] = msg.toByteArray(); + if (data == null) + throw new I2NPMessageException("null data"); // fragments already released??? if (_log.shouldLog(Log.DEBUG)) _log.debug("RECV(" + data.length + "): " + Base64.encode(data) + " " + _context.sha().calculateHash(data).toBase64()); diff --git a/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java b/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java index 78fba7e5b..d26c691b7 100644 --- a/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java +++ b/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java @@ -189,6 +189,9 @@ public class FragmentedMessage { int size = 0; for (int i = 0; i <= _highFragmentNum; i++) { ByteArray ba = _fragments[i]; + // NPE seen here, root cause unknown + if (ba == null) + throw new IllegalStateException("wtf, don't get the completed size when we're not complete - null fragment i=" + i + " of " + _highFragmentNum); size += ba.getValid(); } return size;