Skip to content

Commit d57e00c

Browse files
committed
Add checks to setting output buffer and throw IllegalArgumentException when setting a buffer size greater than the max buffer size
1 parent d7feda9 commit d57e00c

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

src/com/esotericsoftware/kryo/io/Output.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1616
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1717
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
18-
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
19-
18+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
19+
2020
package com.esotericsoftware.kryo.io;
2121

2222
import com.esotericsoftware.kryo.KryoException;
@@ -54,6 +54,8 @@ public Output (int bufferSize) {
5454
* @param maxBufferSize The buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. Can be -1
5555
* for no maximum. */
5656
public Output (int bufferSize, int maxBufferSize) {
57+
if (bufferSize > maxBufferSize && maxBufferSize != -1)
58+
throw new IllegalArgumentException("bufferSize: " + bufferSize + " cannot be greater than maxBufferSize: " + maxBufferSize);
5759
if (maxBufferSize < -1) throw new IllegalArgumentException("maxBufferSize cannot be < -1: " + maxBufferSize);
5860
this.capacity = bufferSize;
5961
this.maxCapacity = maxBufferSize == -1 ? Integer.MAX_VALUE : maxBufferSize;
@@ -110,6 +112,8 @@ public void setBuffer (byte[] buffer) {
110112
* @param maxBufferSize The buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. */
111113
public void setBuffer (byte[] buffer, int maxBufferSize) {
112114
if (buffer == null) throw new IllegalArgumentException("buffer cannot be null.");
115+
if (buffer.length > maxBufferSize && maxBufferSize != -1)
116+
throw new IllegalArgumentException("buffer has length: " + buffer.length + " cannot be greater than maxBufferSize: " + maxBufferSize);
113117
if (maxBufferSize < -1) throw new IllegalArgumentException("maxBufferSize cannot be < -1: " + maxBufferSize);
114118
this.buffer = buffer;
115119
this.maxCapacity = maxBufferSize == -1 ? Integer.MAX_VALUE : maxBufferSize;
@@ -729,4 +733,4 @@ public void writeDoubles (double[] object) throws KryoException {
729733
for (int i = 0, n = object.length; i < n; i++)
730734
writeDouble(object[i]);
731735
}
732-
}
736+
}

test/com/esotericsoftware/kryo/InputOutputTest.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
* SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1616
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1717
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
18-
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
19-
18+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
19+
2020
package com.esotericsoftware.kryo;
2121

2222
import java.io.ByteArrayInputStream;
@@ -869,4 +869,52 @@ public void testFlushRoundTrip() throws Exception {
869869
assertEquals(s1, s2);
870870

871871
}
872-
}
872+
873+
public void testNewOutputMaxBufferSizeLessThanBufferSize() {
874+
int bufferSize = 2;
875+
int maxBufferSize = 1;
876+
877+
try {
878+
new Output(bufferSize, maxBufferSize);
879+
fail("Expecting IllegalArgumentException not thrown");
880+
} catch (IllegalArgumentException e) {
881+
// This exception is expected
882+
}
883+
}
884+
885+
public void testSetOutputMaxBufferSizeLessThanBufferSize() {
886+
int bufferSize = 2;
887+
int maxBufferSize = 1;
888+
889+
Output output = new Output(bufferSize, bufferSize);
890+
assertNotNull(output);
891+
892+
try {
893+
output.setBuffer(new byte[bufferSize], maxBufferSize);
894+
fail("Expecting IllegalArgumentException not thrown");
895+
} catch (IllegalArgumentException e) {
896+
// This exception is expected
897+
}
898+
899+
}
900+
901+
public void testNewOutputMaxBufferSizeIsMinusOne() {
902+
int bufferSize = 2;
903+
int maxBufferSize = -1;
904+
905+
Output output = new Output(bufferSize, maxBufferSize);
906+
assertNotNull(output);
907+
// This test should pass as long as no exception thrown
908+
}
909+
910+
public void testSetOutputMaxBufferSizeIsMinusOne() {
911+
int bufferSize = 2;
912+
int maxBufferSize = -1;
913+
914+
Output output = new Output(bufferSize, bufferSize);
915+
assertNotNull(output);
916+
output.setBuffer(new byte[bufferSize], maxBufferSize);
917+
// This test should pass as long as no exception thrown
918+
}
919+
920+
}

0 commit comments

Comments
 (0)