diff options
author | Nico Hartmann <nicohartmann@chromium.org> | 2020-01-15 16:08:18 +0100 |
---|---|---|
committer | Michael BrĂ¼ning <michael.bruning@qt.io> | 2020-01-16 13:09:44 +0000 |
commit | fd8cf772447ea3567c4301cbd02ecdaeb312cd27 (patch) | |
tree | 6de304ff3bb2f7036226ba2e253564d08c8c7821 | |
parent | 9df23a4c06e64a0f35fe5541e5542ccec9dad170 (diff) | |
download | qtwebengine-chromium-fd8cf772447ea3567c4301cbd02ecdaeb312cd27.tar.gz |
[Backport] Security bug 1028191
Backport of patch:
Merged: [turbofan] Fixes crash caused by truncated bigint
(cherry picked from commit 3ce6be027562ff6641977d7c9caa530c74a279ac)
Bug: chromium:1028191
Change-Id: I7ace89a9a77d84e2357d9e847771c5a35daeed9b
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
-rw-r--r-- | chromium/v8/src/compiler/simplified-lowering.cc | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/chromium/v8/src/compiler/simplified-lowering.cc b/chromium/v8/src/compiler/simplified-lowering.cc index aefb4bdcaea..2de8ee5e3dc 100644 --- a/chromium/v8/src/compiler/simplified-lowering.cc +++ b/chromium/v8/src/compiler/simplified-lowering.cc @@ -1261,7 +1261,13 @@ class RepresentationSelector { void VisitObjectState(Node* node) { if (propagate()) { for (int i = 0; i < node->InputCount(); i++) { - EnqueueInput(node, i, UseInfo::Any()); + // TODO(nicohartmann): Remove, once the deoptimizer can rematerialize + // truncated BigInts. + if (TypeOf(node->InputAt(i)).Is(Type::BigInt())) { + EnqueueInput(node, i, UseInfo::AnyTagged()); + } else { + EnqueueInput(node, i, UseInfo::Any()); + } } } else if (lower()) { Zone* zone = jsgraph_->zone(); @@ -1272,6 +1278,11 @@ class RepresentationSelector { Node* input = node->InputAt(i); (*types)[i] = DeoptMachineTypeOf(GetInfo(input)->representation(), TypeOf(input)); + // TODO(nicohartmann): Remove, once the deoptimizer can rematerialize + // truncated BigInts. + if (TypeOf(node->InputAt(i)).Is(Type::BigInt())) { + ConvertInput(node, i, UseInfo::AnyTagged()); + } } NodeProperties::ChangeOp(node, jsgraph_->common()->TypedObjectState( ObjectIdOf(node->op()), types)); |