On Wed, 12 May 2021 17:48:50 GMT, Mitsuru Kariya <d...@openjdk.java.net> wrote:
> Fix `SerialBlob.setBytes(long pos, byte[] bytes, int offset, int length)` in > the following cases: > > 1. `pos - 1 + bytes.length - offset > this.length() && pos - 1 + length <= > this.length()` > The original implementation throws `ArrayIndexOutOfBoundsException` but > this case should end successfully. > (test31) > > 2. `pos - 1 + length > this.length()` > The original implementation throws `ArrayIndexOutOfBoundsException` but > this case should end successfully. *1 > (test32) > > 3. `pos == this.length() + 1` > The original implementation throws `SerialException` but this case should > end successfully. *2 > (test33) > > 4. `length < 0` > The original implementation throws `ArrayIndexOutOfBoundsException` but > this case should throw `SerialException`. > (test34) > > 5. `offset + length > Integer.MAX_VALUE` > The original implementation throws `ArrayIndexOutOfBoundsException` (or > `OutOfMemoryError` in most cases) but this case should throw > `SerialException`. > (test35) > > Additionally, fix `SerialClob.setString(long pos, String str, int offset, int > length)` in the following cases: > > 1. `offset > str.length()` > The original implementaion throws `StringIndexOutOfBoundsException` but > this case should throw `SerialException`. > (test39) > > 2. `pos - 1 + str.length() - offset > this.length() && pos - 1 + length <= > this.length()` > The original implementation throws `ArrayIndexOutOfBoundsException` but > this case should end successfully. > (test32) > > 3. `pos - 1 + length > this.length()` > The original implementaion throws `SerialException` but this case should > end successfully. *3 > (test40) > > 4. `pos == this.length() + 1` > The original implementaion throws `SerialException` but this case should > end successfully. *4 > (test41) > > 5. `length < 0` > The original implementation throws `StringIndexOutOfBoundsException` but > this case should throw `SerialException`. > (test42) > > 6. `offset + length > Integer.MAX_VALUE` > The original implementation throws `ArrayIndexOutOfBoundsException` (or > `OutOfMemoryError` in most cases) but this case should throw > `SerialException`. > (test43) > > > The javadoc has also been modified according to the above. > > *1 The documentation of `Blob.setBytes()` says, "If the end of the Blob value > is reached while writing the array of bytes, then the length of the Blob > value will be increased to accommodate the extra bytes." > > *2 The documentation of `Blob.setBytes()` says, "If the value specified for > pos is greater than the length+1 of the BLOB value then the behavior is > undefined." > So, it should work correctly when pos == length+1 of the BLOB value. > > *3 The documentation of `Clob.setString()` says, "If the end of the Clob > value is eached while writing the given string, then the length of the Clob > value will be increased to accommodate the extra characters." > > *4 The documentation of `Clob.setString()` says, "If the value specified for > pos is greater than the length+1 of the CLOB value then the behavior is > undefined." > So, it should work correctly when pos == length+1 of the CLOB value. This pull request has now been integrated. Changeset: 63b9f8c0 Author: Mitsuru Kariya <mitsuru.kar...@oss.nttdata.com> Committer: Lance Andersen <lan...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/63b9f8c0da2ed3634002f0f67b18555826aeddc4 Stats: 262 lines in 4 files changed: 168 ins; 9 del; 85 mod 8153490: Cannot setBytes() if incoming buffer's length is bigger than number of elements we want to insert. Reviewed-by: lancea ------------- PR: https://git.openjdk.java.net/jdk/pull/4001