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 been closed without being integrated.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4001

Reply via email to