[asm.js] Check that function table indices are intish.
R=titzer@chromium.org TEST=mjsunit/regress/regress-crbug-969368 BUG=chromium:969368 Change-Id: If8cdd3a170c3c0e487daa2c2dd9e347fb8eabafd Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1662571 Reviewed-by: Ben Titzer <titzer@chromium.org> Commit-Queue: Michael Starzinger <mstarzinger@chromium.org> Cr-Commit-Position: refs/heads/master@{#62226}
This commit is contained in:
parent
595813c6c4
commit
b8474e7022
@ -2108,7 +2108,11 @@ AsmType* AsmJsParser::ValidateCall() {
|
||||
// need to match the information stored at this point.
|
||||
base::Optional<TemporaryVariableScope> tmp;
|
||||
if (Check('[')) {
|
||||
RECURSEn(EqualityExpression());
|
||||
AsmType* index = nullptr;
|
||||
RECURSEn(index = EqualityExpression());
|
||||
if (!index->IsA(AsmType::Intish())) {
|
||||
FAILn("Expected intish index");
|
||||
}
|
||||
EXPECT_TOKENn('&');
|
||||
uint32_t mask = 0;
|
||||
if (!CheckForUnsigned(&mask)) {
|
||||
|
19
test/mjsunit/regress/regress-crbug-969368.js
Normal file
19
test/mjsunit/regress/regress-crbug-969368.js
Normal file
@ -0,0 +1,19 @@
|
||||
// Copyright 2019 the V8 project authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Flags: --allow-natives-syntax
|
||||
|
||||
function Module() {
|
||||
'use asm';
|
||||
function f() {}
|
||||
function g() {
|
||||
var x = 0.0;
|
||||
table[x & 3]();
|
||||
}
|
||||
var table = [f, f, f, f];
|
||||
return { g: g };
|
||||
}
|
||||
var m = Module();
|
||||
assertDoesNotThrow(m.g);
|
||||
assertFalse(%IsAsmWasmCode(Module));
|
Loading…
Reference in New Issue
Block a user