diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java index 815ce9f4f..e1a8030a0 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java @@ -238,10 +238,7 @@ class PacketBuilder { packet.release(); return null; } - if (dataSize == 0) { - // OK according to the protocol but if we send it, it's a bug - _log.error("Sending zero-size fragment " + fragment + " of " + state + " for " + peer); - } + int currentMTU = peer.getMTU(); int availableForAcks = currentMTU - MIN_DATA_PACKET_OVERHEAD - dataSize; int availableForExplicitAcks = availableForAcks; @@ -382,6 +379,11 @@ class PacketBuilder { // _log.debug("Size written: " + sizeWritten + " for fragment " + fragment // + " of " + state.getMessageId()); } + // put this after writeFragment() since dataSize will be zero for use-after-free + if (dataSize == 0) { + // OK according to the protocol but if we send it, it's a bug + _log.error("Sending zero-size fragment " + fragment + " of " + state + " for " + peer); + } off += dataSize;