8338731: MemoryLayout::offsetHandle can return a negative offset#20662
8338731: MemoryLayout::offsetHandle can return a negative offset#20662mcimadamore wants to merge 3 commits intoopenjdk:masterfrom
Conversation
|
/csr needed |
|
👋 Welcome back mcimadamore! A progress list of the required criteria for merging this PR into |
|
@mcimadamore This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be: You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 10 new commits pushed to the
Please see this link for an up-to-date comparison between the source branch of this pull request and the ➡️ To integrate this PR with the above commit message to the |
|
@mcimadamore has indicated that a compatibility and specification (CSR) request is needed for this pull request. @mcimadamore please create a CSR request for issue JDK-8338731 with the correct fix version. This pull request cannot be integrated until the CSR request is approved. |
|
@mcimadamore The following label will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command. |
|
@mcimadamore this pull request can not be integrated into git checkout offset_overflow
git fetch https://git.openjdk.org/jdk.git master
git merge FETCH_HEAD
# resolve conflicts and follow the instructions given by git merge
git commit -m "Merge master"
git push |
|
Unrelated: I wonder if the performance of: and Differ? |
|
They should have the same performance characteristics. They have different permissions for access checks, and since |
|
/integrate |
|
Going to push as commit 1ff9ac7.
Your commit was automatically rebased without conflicts. |
|
@mcimadamore Pushed as commit 1ff9ac7. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
When working on startup improvements, I noticed that the method handle returned by
MemoryLayout::offsetHandlecan 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(seeMemoryLayout::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 offsetBand a layout offsetL.Lis guaranteed not to overflow, by construction (asLis derived from a layout path). ButB+Lmight overflow, so the new logic checks for that.Progress
Issues
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/20662/head:pull/20662$ git checkout pull/20662Update a local copy of the PR:
$ git checkout pull/20662$ git pull https://git.openjdk.org/jdk.git pull/20662/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 20662View PR using the GUI difftool:
$ git pr show -t 20662Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/20662.diff
Webrev
Link to Webrev Comment