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

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

Issue 2636173002: [wasm] Enforce memory and table limits during instantiation. (Closed)
Patch Set: 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
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);
(...skipping 15 matching lines...) Expand all
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({element: "anyfunc", initial: -1}), R angeError);
45 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: outOfUi nt32RangeValue}), RangeError); 47 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: outOfUi nt32RangeValue}), RangeError);
46 48
47 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: -1}), RangeError); 49 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: -1}), RangeError);
48 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: outOfUint32RangeValue}), RangeError); 50 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: outOfUint32RangeValue}), RangeError);
49 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: 9}), RangeError); 51 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 10, max imum: 9}), RangeError);
50 52
51 assertThrows(() => new WebAssembly.Table({element: "anyfunc", initial: 0, maxi mum: int32ButOob}));
52
53 let table; 53 let table;
54 table = new WebAssembly.Table({element: "anyfunc", initial: 1}); 54 table = new WebAssembly.Table({element: "anyfunc", initial: 1});
55 assertTableIsValid(table); 55 assertTableIsValid(table);
56 assertEquals(1, table.length); 56 assertEquals(1, table.length);
57 assertEquals(null, table.get(0)); 57 assertEquals(null, table.get(0));
58 assertEquals(undefined, table[0]); 58 assertEquals(undefined, table[0]);
59 59
60 table = new WebAssembly.Table({element: "anyfunc", initial: "2"}); 60 table = new WebAssembly.Table({element: "anyfunc", initial: "2"});
61 assertTableIsValid(table); 61 assertTableIsValid(table);
62 assertEquals(2, table.length); 62 assertEquals(2, table.length);
(...skipping 24 matching lines...) Expand all
87 assertTableIsValid(table); 87 assertTableIsValid(table);
88 assertEquals(0, table.length); 88 assertEquals(0, table.length);
89 89
90 table = new WebAssembly.Table({element: "anyfunc", maximum: {valueOf() { retur n "10" }}}); 90 table = new WebAssembly.Table({element: "anyfunc", maximum: {valueOf() { retur n "10" }}});
91 assertTableIsValid(table); 91 assertTableIsValid(table);
92 assertEquals(0, table.length); 92 assertEquals(0, table.length);
93 93
94 table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: undefi ned}); 94 table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: undefi ned});
95 assertTableIsValid(table); 95 assertTableIsValid(table);
96 assertEquals(0, table.length); 96 assertEquals(0, table.length);
97
98 table = new WebAssembly.Table({element: "anyfunc", maximum: kMaxUint32});
99 assertTableIsValid(table);
100 assertEquals(0, table.length);
101
102 table = new WebAssembly.Table({element: "anyfunc", maximum: kV8MaxWasmTableSiz e + 1});
103 assertTableIsValid(table);
104 assertEquals(0, table.length);
97 })(); 105 })();
98 106
99 (function TestMaximumIsReadOnce() { 107 (function TestMaximumIsReadOnce() {
100 var a = true; 108 var a = true;
101 var desc = {element: "anyfunc", initial: 10}; 109 var desc = {element: "anyfunc", initial: 10};
102 Object.defineProperty(desc, 'maximum', {get: function() { 110 Object.defineProperty(desc, 'maximum', {get: function() {
103 if (a) { 111 if (a) {
104 a = false; 112 a = false;
105 return 16; 113 return 16;
106 } 114 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 table.grow(0); 261 table.grow(0);
254 check(table); 262 check(table);
255 table.grow(5); 263 table.grow(5);
256 check(table); 264 check(table);
257 table.grow(0); 265 table.grow(0);
258 check(table); 266 check(table);
259 assertThrows(() => table.grow(1), RangeError); 267 assertThrows(() => table.grow(1), RangeError);
260 assertThrows(() => table.grow(-10), RangeError); 268 assertThrows(() => table.grow(-10), RangeError);
261 269
262 assertThrows(() => WebAssembly.Table.prototype.grow.call([], 0), TypeError); 270 assertThrows(() => WebAssembly.Table.prototype.grow.call([], 0), TypeError);
271
272 table = new WebAssembly.Table({element: "anyfunc", initial: 0, maximum: kV8Max WasmTableSize});
rossberg 2017/01/17 14:22:06 Nit: line length
titzer 2017/01/17 16:47:18 Done.
273 table.grow(kV8MaxWasmTableSize);
274 assertThrows(() => table.grow(1), RangeError);
263 })(); 275 })();
OLDNEW
« test/mjsunit/wasm/indirect-tables.js ('K') | « test/mjsunit/wasm/module-memory.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698