diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java index 276ec13c3060f0c812917f3044d20898549c5bfe..600ad3c4fd0790fef8b9fdd500d12ff9d44c6e5d 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java @@ -402,16 +402,21 @@ class OutboundMessageState implements CDPQEntry { int end = start + fragmentSize(fragmentNum); int toSend = end - start; byte buf[] = _messageBuf.getData(); - if ( (buf != null) && (start + toSend < buf.length) && (out != null) && (outOffset + toSend < out.length) ) { - System.arraycopy(_messageBuf.getData(), start, out, outOffset, toSend); + if ( (buf != null) && (start + toSend <= buf.length) && (outOffset + toSend <= out.length) ) { + System.arraycopy(buf, start, out, outOffset, toSend); if (_log.shouldLog(Log.DEBUG)) _log.debug("Raw fragment[" + fragmentNum + "] for " + _messageId + "[" + start + "-" + (start+toSend) + "/" + _totalSize + "/" + _fragmentSize + "]: " + Base64.encode(out, outOffset, toSend)); return toSend; + } else if (buf == null) { + if (_log.shouldLog(Log.WARN)) + _log.warn("Error: null buf"); } else { - return -1; + if (_log.shouldLog(Log.WARN)) + _log.warn("Error: " + start + '/' + end + '/' + outOffset + '/' + out.length); } + return -1; } /**