> Unsafe was changed recently through: 
> https://github.com/openjdk/jdk/pull/31249 to no longer treat any non-zero 
> byte read as a `boolean` through Unsafe as `true`, but only treat the 
> 'canonical' representation, where only the least significant bit in the byte 
> is set, as `true`.
> 
> This change inadvertently leaked out through the memory access var handles. A 
> user can write a `byte` into a memory segment (on or off-heap), and then read 
> it back as a `boolean`, making this behavior change observable. Since the 
> fallback linker depends on the previous behavior in the implementation, the 
> tier5 test from the title was failing. But, there is really a gap in testing 
> here, and we can observe the difference in behavior when just using the 
> memory access parts of the API as well.
> 
> It is important that the normalization of boolean values is the same in all 
> these scenarios:
> - Normalizing a value returned from native code by a downcall
> - Normalizing an argument passed by native code to an upcall stub
> - Normalizing a value read from a memory segment using a var handle or the 
> MemorySegment::get accessor
> 
> To that end, this patch tweaks the memory segment var handles for boolean 
> access to restore the old normalization behavior. I've also added the missing 
> testing for this case.
> 
> ---------
> - [x] I confirm that I make this contribution in accordance with the [OpenJDK 
> Interim AI Policy](https://openjdk.org/legal/ai).

Jorn Vernee has updated the pull request incrementally with two additional 
commits since the last revision:

 - Review comments
 - Undo byte if blocks

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/31727/files
  - new: https://git.openjdk.org/jdk/pull/31727/files/775c96ac..56856776

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=31727&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=31727&range=00-01

  Stats: 74 lines in 2 files changed: 56 ins; 0 del; 18 mod
  Patch: https://git.openjdk.org/jdk/pull/31727.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/31727/head:pull/31727

PR: https://git.openjdk.org/jdk/pull/31727

Reply via email to