summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Hartmann <nicohartmann@chromium.org>2020-01-15 16:08:18 +0100
committerMichael BrĂ¼ning <michael.bruning@qt.io>2020-01-16 13:09:44 +0000
commitfd8cf772447ea3567c4301cbd02ecdaeb312cd27 (patch)
tree6de304ff3bb2f7036226ba2e253564d08c8c7821
parent9df23a4c06e64a0f35fe5541e5542ccec9dad170 (diff)
downloadqtwebengine-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.cc13
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));