On Mon, 29 Jan 2024 19:45:41 GMT, Paul Sandoz wrote:
> The implementation of method `VectorSpecies::fromMemorySegment`, in
> `AbstractSpecies::fromMemorySegment`, neglects to perform bounds checks on
> the offset argument when the method is compiled by C2 (bounds checks are
> performed when interpreted and by C1).
>
> This is an oversight and explicit bounds checks are required, as is already
> case for the other load and store memory access methods (including storing to
> memory memory segments).
>
> The workaround is to call the static method `{T}Vector::fromMemorySegment`.
>
> The fix is for the implementation(s) of `VectorSpecies::fromMemorySegment` to
> do the same and call `{T}Vector::fromMemorySegment`, following the same
> pattern for implementations of `VectorSpecies::fromArray`.
>
> The tests have been conservatively updated to call the species access method
> where possible in the knowledge that it calls the vector access method (the
> tests were intended to test out of bounds access when compiled by C2).
>
> Thinking ahead its tempting to remove the species access methods, simplifying
> functionality that is duplicated.
This pull request has now been integrated.
Changeset: 1ae85138
Author:Paul Sandoz
URL:
https://git.openjdk.org/jdk/commit/1ae851387f881263ccc6aeace5afdd0f49d41d33
Stats: 248 lines in 39 files changed: 132 ins; 8 del; 108 mod
8324858: [vectorapi] Bounds checking issues when accessing memory segments
Reviewed-by: mcimadamore, jbhateja
-
PR: https://git.openjdk.org/jdk/pull/17621