Fix #255
diff --git a/release-notes/VERSION b/release-notes/VERSION
index 6a2291d..2c6a70a 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -18,6 +18,7 @@
#253: Add `JsonGenerator. writeEmbeddedObject()` to allow writes of opaque native types
(suggested by Gregoire C)
+#255: Relax ownership checks for buffers not to require increase in size
2.7.2 (26-Feb-2016)
diff --git a/src/main/java/com/fasterxml/jackson/core/io/IOContext.java b/src/main/java/com/fasterxml/jackson/core/io/IOContext.java
index a4675be..18f50c8 100644
--- a/src/main/java/com/fasterxml/jackson/core/io/IOContext.java
+++ b/src/main/java/com/fasterxml/jackson/core/io/IOContext.java
@@ -270,12 +270,17 @@
}
protected final void _verifyRelease(byte[] toRelease, byte[] src) {
- if ((toRelease != src) && (toRelease.length <= src.length)) { throw wrongBuf(); }
+ // 07-Mar-2016, tatu: As per [core#255], only prevent shrinking of buffer
+ if ((toRelease != src) && (toRelease.length < src.length)) { throw wrongBuf(); }
}
protected final void _verifyRelease(char[] toRelease, char[] src) {
- if ((toRelease != src) && (toRelease.length <= src.length)) { throw wrongBuf(); }
+ // 07-Mar-2016, tatu: As per [core#255], only prevent shrinking of buffer
+ if ((toRelease != src) && (toRelease.length < src.length)) { throw wrongBuf(); }
}
- private IllegalArgumentException wrongBuf() { return new IllegalArgumentException("Trying to release buffer not owned by the context"); }
+ private IllegalArgumentException wrongBuf() {
+ // sanity check failed; trying to return different, smaller buffer.
+ return new IllegalArgumentException("Trying to release buffer smaller than original");
+ }
}
diff --git a/src/test/java/com/fasterxml/jackson/core/io/TestIOContext.java b/src/test/java/com/fasterxml/jackson/core/io/TestIOContext.java
index 3bad591..475abb5 100644
--- a/src/test/java/com/fasterxml/jackson/core/io/TestIOContext.java
+++ b/src/test/java/com/fasterxml/jackson/core/io/TestIOContext.java
@@ -24,7 +24,7 @@
try {
ctxt.releaseReadIOBuffer(new byte[1]);
} catch (IllegalArgumentException e) {
- verifyException(e, "not owned");
+ verifyException(e, "smaller than original");
}
// but call with null is a NOP for convenience
ctxt.releaseReadIOBuffer(null);
@@ -40,7 +40,7 @@
try {
ctxt.releaseWriteEncodingBuffer(new byte[1]);
} catch (IllegalArgumentException e) {
- verifyException(e, "not owned");
+ verifyException(e, "smaller than original");
}
ctxt.releaseWriteEncodingBuffer(null);
@@ -55,7 +55,7 @@
try {
ctxt.releaseTokenBuffer(new char[1]);
} catch (IllegalArgumentException e) {
- verifyException(e, "not owned");
+ verifyException(e, "smaller than original");
}
ctxt.releaseTokenBuffer(null);
@@ -70,7 +70,7 @@
try {
ctxt.releaseConcatBuffer(new char[1]);
} catch (IllegalArgumentException e) {
- verifyException(e, "not owned");
+ verifyException(e, "smaller than original");
}
ctxt.releaseConcatBuffer(null);
@@ -85,7 +85,7 @@
try {
ctxt.releaseNameCopyBuffer(new char[1]);
} catch (IllegalArgumentException e) {
- verifyException(e, "not owned");
+ verifyException(e, "smaller than original");
}
ctxt.releaseNameCopyBuffer(null);
}