diff --git a/pom.xml b/pom.xml index 69ba0be..2ad2a55 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ jar redis.clients jedis - 2.5.1-SNAPSHOT + 2.5.2-SNAPSHOT Jedis Jedis is a blazingly small and sane Redis java client. https://github.com/xetorthio/jedis diff --git a/src/main/java/redis/clients/util/RedisOutputStream.java b/src/main/java/redis/clients/util/RedisOutputStream.java index 4dba859..dcec7fa 100644 --- a/src/main/java/redis/clients/util/RedisOutputStream.java +++ b/src/main/java/redis/clients/util/RedisOutputStream.java @@ -34,10 +34,10 @@ public final class RedisOutputStream extends FilterOutputStream { } public void write(final byte b) throws IOException { - buf[count++] = b; if (count == buf.length) { flushBuffer(); } + buf[count++] = b; } public void write(final byte[] b) throws IOException { @@ -63,10 +63,10 @@ public final class RedisOutputStream extends FilterOutputStream { final int size = in.length(); for (int i = 0; i != size; ++i) { - buf[count++] = (byte) in.charAt(i); if (count == buf.length) { flushBuffer(); } + buf[count++] = (byte) in.charAt(i); } writeCrLf(); @@ -111,19 +111,19 @@ public final class RedisOutputStream extends FilterOutputStream { char c = str.charAt(i); if (!(c < 0x80)) break; - buf[count++] = (byte) c; if (count == buf.length) { flushBuffer(); } + buf[count++] = (byte) c; } for (; i < strLen; i++) { char c = str.charAt(i); if (c < 0x80) { - buf[count++] = (byte) c; if (count == buf.length) { flushBuffer(); } + buf[count++] = (byte) c; } else if (c < 0x800) { if (2 >= buf.length - count) { flushBuffer(); diff --git a/src/test/java/redis/clients/jedis/tests/ProtocolTest.java b/src/test/java/redis/clients/jedis/tests/ProtocolTest.java index 504a66a..4245aae 100644 --- a/src/test/java/redis/clients/jedis/tests/ProtocolTest.java +++ b/src/test/java/redis/clients/jedis/tests/ProtocolTest.java @@ -4,6 +4,7 @@ import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.ArrayList; @@ -38,6 +39,28 @@ public class ProtocolTest extends JedisTestBase { assertEquals(expectedCommand, sb.toString()); } + + @Test(expected=IOException.class) + public void writeOverflow() throws IOException { + RedisOutputStream ros = new RedisOutputStream(new OutputStream() { + + @Override + public void write(int b) throws IOException { + throw new IOException("thrown exception"); + + } + }); + + ros.write(new byte[8191]); + + try { + ros.write((byte)'*'); + } catch (IOException ioe) {} + + + ros.write((byte)'*'); + + } @Test public void bulkReply() {