Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: test/mjsunit/wasm/table.js

Issue 2636173002: [wasm] Enforce memory and table limits during instantiation. (Closed)
Patch Set: [wasm] Enforce memory and table limits during instantiation. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/wasm/module-memory.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --expose-wasm 5 // Flags: --expose-wasm
6 6
7 'use strict'; 7 'use strict';
8 8
9 load("test/mjsunit/wasm/wasm-constants.js"); 9 load("test/mjsunit/wasm/wasm-constants.js");
10 load("test/mjsunit/wasm/wasm-module-builder.js"); 10 load("test/mjsunit/wasm/wasm-module-builder.js");
11 11
12 // Basic tests. 12 // Basic tests.
13 13
14 var outOfUint32RangeValue = 1e12; 14 var outOfUint32RangeValue = 1e12;
15 var int32ButOob = 1073741824; 15 var int32ButOob = 1073741824;
16 var kMaxUint32 = (4 * 1024 * 1024 * 1024) - 1;
17 var kV8MaxWasmTableSize = 10000000;
16 18
17 function assertTableIsValid(table) { 19 function assertTableIsValid(table) {
18 assertSame(WebAssembly.Table.prototype, table.__proto__); 20 assertSame(WebAssembly.Table.prototype, table.__proto__);
19 assertSame(WebAssembly.Table, table.constructor); 21 assertSame(WebAssembly.Table, table.constructor);
20 assertTrue(table instanceof Object); 22 assertTrue(table instanceof Object);
21 assertTrue(table instanceof WebAssembly.Table); 23 assertTrue(table instanceof WebAssembly.Table);
22 } 24 }
23 25
24 (function TestConstructor() { 26 (function TestConstructor() {
25 assertTrue(WebAssembly.Table instanceof Function); 27 assertTrue(WebAssembly.Table instanceof Function);
26 assertSame(WebAssembly.Table, WebAssembly.Table.prototype.constructor); 28 assertSame(WebAssembly.Table, WebAssembly.Table.prototype.constructor);
27 assertTrue(WebAssembly.Table.prototype.grow instanceof Function); 29 assertTrue(WebAssembly.Table.prototype.grow instanceof Function);
28 assertTrue(WebAssembly.Table.prototype.get instanceof Function); 30 assertTrue(WebAssembly.Table.prototype.get instanceof Function);
29 assertTrue(WebAssembly.Table.prototype.set instanceof Function); 31 assertTrue(WebAssembly.Table.prototype.set instanceof Function);
30 let desc = Object.getOwnPropertyDescriptor(WebAssembly.Table.prototype, 'lengt h'); 32 let desc = Object.getOwnPropertyDescriptor(WebAssembly.Table.prototype, 'lengt h');
31 assertTrue(desc.get instanceof Function); 33 assertTrue(desc.get instanceof Function);
32 assertSame(undefined, desc.set); 34 assertSame(undefined, desc.set);
33 35
34 assertThrows(() => new WebAssembly.Table(), TypeError); 36 assertThrows(() => new WebAssembly.Table(), TypeError);
35 assertThrows(() => new WebAssembly.Table(1), TypeError); 37 assertThrows(() => new WebAssembly.Table(1), TypeError);
36 assertThrows(() => new WebAssembly.Table(""), TypeError); 38 assertThrows(() => new WebAssembly.Table(""), TypeError);
37 39
38 assertThrows(() => new WebAssembly.Table({}), TypeError); 40 assertThrows(() => new WebAssembly.Table({}), TypeError);
39 assertThrows(() => new WebAssembly.Table({initial: 10}), TypeError); 41 assertThrows(() => new WebAssembly.Table({initial: 10}), TypeError);
40 42
41 assertThrows(() => new WebAssembly.Table({element: 0, initial: 10}), TypeError ); 43 assertThrows(() => new WebAssembly.Table({element: 0, initial: 10}), TypeError );
42 assertThrows(() => new WebAssembly.Table({element: "any", initial: 10}), TypeE rror); 44 assertThrows(() => new WebAssembly.Table({element: "any", initial: 10}), TypeE rror);
43 45
44 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: -1}), R angeError); 46 assertThrows(() => new WebAssembly.Table(
45 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: outOfUi nt32RangeValue}), RangeError); 47 {element: "anyfunc", initial: -1}), RangeError);
48 assertThrows(() => new WebAssembly.Table(
49 {element: "anyfunc", initial: outOfUint32RangeValue}), RangeError);
46 50
47 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: -1}), RangeError); 51 assertThrows(() => new WebAssembly.Table(
48 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: outOfUint32RangeValue}), RangeError); 52 {element: "anyfunc", initial: 10, maximum: -1}), RangeError);
49 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: 9}), RangeError); 53 assertThrows(() => new WebAssembly.Table(
50 54 {element: "anyfunc", initial: 10, maximum: outOfUint32RangeValue}), RangeErr or);
51 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 0, maxi mum: int32ButOob})); 55 assertThrows(() => new WebAssembly.Table(
56 {element: "anyfunc", initial: 10, maximum: 9}), RangeError);
52 57
53 let table; 58 let table;
54 table = new WebAssembly.Table({element: "anyfunc", initial: 1}); 59 table = new WebAssembly.Table({element: "anyfunc", initial: 1});
55 assertTableIsValid(table); 60 assertTableIsValid(table);
56 assertEquals(1, table.length); 61 assertEquals(1, table.length);
57 assertEquals(null, table.get(0)); 62 assertEquals(null, table.get(0));
58 assertEquals(undefined, table[0]); 63 assertEquals(undefined, table[0]);
59 64
60 table = new WebAssembly.Table({element: "anyfunc", initial: "2"}); 65 table = new WebAssembly.Table({element: "anyfunc", initial: "2"});
61 assertTableIsValid(table); 66 assertTableIsValid(table);
(...skipping 25 matching lines...) Expand all
87 assertTableIsValid(table); 92 assertTableIsValid(table);
88 assertEquals(0, table.length); 93 assertEquals(0, table.length);
89 94
90 table = new WebAssembly.Table({element: "anyfunc", maximum: {valueOf() { retur n "10" }}}); 95 table = new WebAssembly.Table({element: "anyfunc", maximum: {valueOf() { retur n "10" }}});
91 assertTableIsValid(table); 96 assertTableIsValid(table);
92 assertEquals(0, table.length); 97 assertEquals(0, table.length);
93 98
94 table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: undefi ned}); 99 table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: undefi ned});
95 assertTableIsValid(table); 100 assertTableIsValid(table);
96 assertEquals(0, table.length); 101 assertEquals(0, table.length);
102
103 table = new WebAssembly.Table({element: "anyfunc", maximum: kMaxUint32});
104 assertTableIsValid(table);
105 assertEquals(0, table.length);
106
107 table = new WebAssembly.Table({element: "anyfunc", maximum: kV8MaxWasmTableSiz e + 1});
108 assertTableIsValid(table);
109 assertEquals(0, table.length);
97 })(); 110 })();
98 111
99 (function TestMaximumIsReadOnce() { 112 (function TestMaximumIsReadOnce() {
100 var a = true; 113 var a = true;
101 var desc = {element: "anyfunc", initial: 10}; 114 var desc = {element: "anyfunc", initial: 10};
102 Object.defineProperty(desc, 'maximum', {get: function() { 115 Object.defineProperty(desc, 'maximum', {get: function() {
103 if (a) { 116 if (a) {
104 a = false; 117 a = false;
105 return 16; 118 return 16;
106 } 119 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 table.grow(0); 266 table.grow(0);
254 check(table); 267 check(table);
255 table.grow(5); 268 table.grow(5);
256 check(table); 269 check(table);
257 table.grow(0); 270 table.grow(0);
258 check(table); 271 check(table);
259 assertThrows(() => table.grow(1), RangeError); 272 assertThrows(() => table.grow(1), RangeError);
260 assertThrows(() => table.grow(-10), RangeError); 273 assertThrows(() => table.grow(-10), RangeError);
261 274
262 assertThrows(() => WebAssembly.Table.prototype.grow.call([], 0), TypeError); 275 assertThrows(() => WebAssembly.Table.prototype.grow.call([], 0), TypeError);
276
277 table = new WebAssembly.Table(
278 {element: "anyfunc", initial: 0, maximum: kV8MaxWasmTableSize});
279 table.grow(kV8MaxWasmTableSize);
280 assertThrows(() => table.grow(1), RangeError);
263 })(); 281 })();
OLDNEW
« no previous file with comments | « test/mjsunit/wasm/module-memory.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698