diff --git a/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java b/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java index 9a210eaea94a7300bb5ee9b254d85ef0e7f02818..1649c2fbd9397da79f47c6e38da3a893955200aa 100644 --- a/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java +++ b/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java @@ -37,21 +37,16 @@ public class BandwidthLimitedOutputStream extends FilterOutputStream { out.write(val); } public void write(byte src[]) throws IOException { - if (src == null) return; - if (src.length > CHUNK_SIZE) { - for (int i = 0; i < src.length; ) { - write(src, i*CHUNK_SIZE, CHUNK_SIZE); - i += CHUNK_SIZE; - } - } else { - write(src, 0, src.length); - } + write(src, 0, src.length); } public void write(byte src[], int off, int len) throws IOException { if (_log.shouldLog(Log.DEBUG)) _log.debug("Writing " + len + " bytes"); if (src == null) return; if (len <= 0) return; + if (len + off > src.length) + throw new IllegalArgumentException("wtf are you thinking? len=" + len + + ", off=" + off + ", data=" + src.length); if (len <= CHUNK_SIZE) { _context.bandwidthLimiter().delayOutbound(_peer, len); out.write(src, off, len); @@ -62,10 +57,10 @@ public class BandwidthLimitedOutputStream extends FilterOutputStream { out.write(src, off+i, CHUNK_SIZE); i += CHUNK_SIZE; } - int remainder = len % CHUNK_SIZE; - if (remainder != 0) { + int remainder = (len % CHUNK_SIZE); + if (remainder > 0) { _context.bandwidthLimiter().delayOutbound(_peer, remainder); - out.write(src, off+len-(remainder), remainder); + out.write(src, i, remainder); } } }