-
Notifications
You must be signed in to change notification settings - Fork 29.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
deps: cherry-pick 8ed65b97 from V8's upstream #8411
Conversation
Original commit message: Make FieldType::None() non-nullptr value to avoid undefined behaviour When FieldType::None() returns a cast Smi::FromInt(0), which translates as nullptr, the FieldType::IsNone() check becomes equivalent to `this == nullptr` which is not allowed by the standard and therefore optimized away as a false constant by GCC 6. This has lead to crashes when invoking methods on FieldType::None(). Using a different Smi constant for FieldType::None() makes the compiler always include a comparison against that value. The choice of these constants has no effect as they are effectively arbitrary. BUG=nodejs#8310 Review-Url: https://codereview.chromium.org/2292953002 Cr-Commit-Position: refs/heads/master@{nodejs#39023} Fixes: nodejs#8310
LGTM. Still UB though, strictly speaking. |
Running CI again to make sure the test failures are unrelated: https://ci.nodejs.org/job/node-test-commit/4925/ |
UB? Do the tests pass on both commits separately? (I can never tell in which order the commits are) |
Undefined behavior. If you mean 'what kind of UB', it's not legal to construct pointers that don't point to a legal object or to legal_object+1 (the 'one element after' rule.) |
Thanks! |
@fhinkel If you mean, do the tests work after the first commit here?, the answer is “no” – the second commit is needed to make them function properly. They should be landed as a single commit, I just wanted to clarify the distinction between what is in V8 and what is not. :) |
@Fishrock123 … this one should be good to go. Since you’re putting a release together right now, I’m not sure if it’s easier if I land this in |
@addaleax Thanks for clarifying, that's what I meant. |
LGTM |
Original commit message: Make FieldType::None() non-nullptr value to avoid undefined behaviour When FieldType::None() returns a cast Smi::FromInt(0), which translates as nullptr, the FieldType::IsNone() check becomes equivalent to `this == nullptr` which is not allowed by the standard and therefore optimized away as a false constant by GCC 6. This has lead to crashes when invoking methods on FieldType::None(). Using a different Smi constant for FieldType::None() makes the compiler always include a comparison against that value. The choice of these constants has no effect as they are effectively arbitrary. BUG=#8310 Review-Url: https://codereview.chromium.org/2292953002 Cr-Commit-Position: refs/heads/master@{#39023} Fixes: #8310 PR-URL: #8411 Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]>
Landed on |
@addaleax should this be backported? |
This shouldn’t apply to v4.x, no. |
Checklist
make -j4 test
(UNIX), orvcbuild test nosign
(Windows) passesAffected core subsystem(s)
deps/v8
Description of change
Um, hope I’m doing this right by backporting v8/v8@8ed65b97 to v6.x – in master that should not be necessary as this will come with a regular V8 5.4 update before v7.x is cut?
The test needed a little fixup to work with V8 5.1.
Original commit message:
Fixes: #8310
CI:
https://ci.nodejs.org/job/node-test-commit/4923/
https://ci.nodejs.org/job/node-test-commit-v8-linux/305/