| // Copyright 2014 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 |
| |
| var buffer1 = new ArrayBuffer(100 * 1024); |
| |
| assertThrows(function() { |
| var array1 = new Uint8Array(buffer1, {valueOf : function() { |
| %ArrayBufferNeuter(buffer1); |
| return 0; |
| }}); |
| }, TypeError); |
| |
| var buffer2 = new ArrayBuffer(100 * 1024); |
| |
| assertThrows(function() { |
| var array2 = new Uint8Array(buffer2, 0, {valueOf : function() { |
| %ArrayBufferNeuter(buffer2); |
| return 100 * 1024; |
| }}); |
| }, TypeError); |
| |
| let convertedOffset = false; |
| let convertedLength = false; |
| assertThrows(() => |
| new Uint8Array(buffer1, {valueOf : function() { |
| convertedOffset = true; |
| return 0; |
| }}, {valueOf : function() { |
| convertedLength = true; |
| %ArrayBufferNeuter(buffer1); |
| return 0; |
| }}), TypeError); |
| assertTrue(convertedOffset); |
| assertTrue(convertedLength); |
| |
| var buffer3 = new ArrayBuffer(100 * 1024 * 1024); |
| var dataView1 = new DataView(buffer3, {valueOf : function() { |
| %ArrayBufferNeuter(buffer3); |
| return 0; |
| }}); |
| |
| assertEquals(0, dataView1.byteLength); |
| |
| var buffer4 = new ArrayBuffer(100 * 1024); |
| assertThrows(function() { |
| var dataView2 = new DataView(buffer4, 0, {valueOf : function() { |
| %ArrayBufferNeuter(buffer4); |
| return 100 * 1024 * 1024; |
| }}); |
| }, RangeError); |
| |
| |
| var buffer5 = new ArrayBuffer(100 * 1024); |
| assertThrows(function() { |
| buffer5.slice({valueOf : function() { |
| %ArrayBufferNeuter(buffer5); |
| return 0; |
| }}, 100 * 1024 * 1024); |
| }, TypeError); |
| |
| |
| var buffer7 = new ArrayBuffer(100 * 1024 * 1024); |
| assertThrows(function() { |
| buffer7.slice(0, {valueOf : function() { |
| %ArrayBufferNeuter(buffer7); |
| return 100 * 1024 * 1024; |
| }}); |
| }, TypeError); |
| |
| var buffer9 = new ArrayBuffer(1024); |
| var array9 = new Uint8Array(buffer9); |
| assertThrows(() => |
| array9.subarray({valueOf : function() { |
| %ArrayBufferNeuter(buffer9); |
| return 0; |
| }}, 1024), TypeError); |
| assertEquals(0, array9.length); |
| |
| var buffer11 = new ArrayBuffer(1024); |
| var array11 = new Uint8Array(buffer11); |
| assertThrows(() => |
| array11.subarray(0, {valueOf : function() { |
| %ArrayBufferNeuter(buffer11); |
| return 1024; |
| }}), TypeError); |
| assertEquals(0, array11.length); |