When working on startup improvements, I noticed that the method handle returned 
by `MemoryLayout::offsetHandle` can overflow if the client calls the handle 
with a base offset that is too big.

In other similar situations, the layout API always fails with 
`ArithmeticException` (see `MemoryLayout::scale`), so we should do the same 
here.

The fix is to use a `Math::addExact(long, long)` for the outermost add 
operation in the computation of the offset method handle. That outermost 
computation in fact is the only one that can overflow: it is an addition 
between a user-provided base offset `B` and a layout offset `L`. `L` is 
guaranteed not to overflow, by construction (as `L` is derived from a layout 
path). But `B` + `L` might overflow, so the new logic checks for that.

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

Commit messages:
 - Initial push

Changes: https://git.openjdk.org/jdk/pull/20662/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=20662&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8338731
  Stats: 23 lines in 3 files changed: 14 ins; 1 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/20662.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/20662/head:pull/20662

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

Reply via email to