109fec8ce0
To prevent correctness fuzzers from finding spurious differences between architectures, we need to mock out the maximum length of all TypedArrays. This patch adds the two new types BigInt64Array and BigUint64Array to the existing list. Bug: chromium:894864 Change-Id: I5cdeeafa597b09aee2d9b4d368c07f10008baf58 Reviewed-on: https://chromium-review.googlesource.com/c/1285399 Commit-Queue: Michael Achenbach <machenbach@chromium.org> Reviewed-by: Michael Achenbach <machenbach@chromium.org> Cr-Commit-Position: refs/heads/master@{#56710}
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
// Copyright 2017 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.
|
|
|
|
// This is intended for permanent JS behavior changes for mocking out
|
|
// non-deterministic behavior. For temporary suppressions, please refer to
|
|
// v8_suppressions.js.
|
|
// This mocks only architecture specific differences. Refer to v8_mocks.js
|
|
// for the general case.
|
|
// This file is loaded before each correctness test cases and won't get
|
|
// minimized.
|
|
|
|
// Mock maximum typed-array length and limit to 1MiB.
|
|
(function () {
|
|
var mock = function(arrayType) {
|
|
var handler = {
|
|
construct: function(target, args) {
|
|
var arrayLength = args[0]
|
|
if (args.length > 0 &&
|
|
Number.isInteger(args[0]) &&
|
|
args[0] > 1048576) {
|
|
args[0] = 1048576
|
|
} else if (args.length > 2 &&
|
|
Number.isInteger(args[2]) &&
|
|
args[2] > 1048576) {
|
|
args[2] = 1048576
|
|
}
|
|
return new (
|
|
Function.prototype.bind.apply(arrayType, [null].concat(args)));
|
|
},
|
|
};
|
|
return new Proxy(arrayType, handler);
|
|
}
|
|
|
|
ArrayBuffer = mock(ArrayBuffer);
|
|
Int8Array = mock(Int8Array);
|
|
Uint8Array = mock(Uint8Array);
|
|
Uint8ClampedArray = mock(Uint8ClampedArray);
|
|
Int16Array = mock(Int16Array);
|
|
Uint16Array = mock(Uint16Array);
|
|
Int32Array = mock(Int32Array);
|
|
Uint32Array = mock(Uint32Array);
|
|
BigInt64Array = mock(BigInt64Array);
|
|
BigUint64Array = mock(BigUint64Array);
|
|
Float32Array = mock(Float32Array);
|
|
Float64Array = mock(Float64Array);
|
|
})();
|
|
|
|
// Mock typed array set function and limit maximum offset to 1MiB.
|
|
(function () {
|
|
var typedArrayTypes = [
|
|
Int8Array,
|
|
Uint8Array,
|
|
Uint8ClampedArray,
|
|
Int16Array,
|
|
Uint16Array,
|
|
Int32Array,
|
|
Uint32Array,
|
|
BigInt64Array,
|
|
BigUint64Array,
|
|
Float32Array,
|
|
Float64Array,
|
|
];
|
|
for (let typedArrayType of typedArrayTypes) {
|
|
let set = typedArrayType.prototype.set
|
|
typedArrayType.prototype.set = function(array, offset) {
|
|
set.apply(this, [array, offset > 1048576 ? 1048576 : offset])
|
|
};
|
|
}
|
|
})();
|