Integrated: 8153490: Cannot setBytes() if incoming buffer's length is bigger than number of elements we want to insert.
Mitsuru Kariya
duke at openjdk.java.net
Thu Oct 28 15:59:20 UTC 2021
On Wed, 12 May 2021 17:48:50 GMT, Mitsuru Kariya <duke at 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.Kariya at oss.nttdata.com>
Committer: Lance Andersen <lancea at 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
More information about the core-libs-dev
mailing list