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

Side by Side Diff: test/mjsunit/wasm/indirect-tables.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/import-memory.js ('k') | test/mjsunit/wasm/instantiate-module-basic.js » ('j') | 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 load("test/mjsunit/wasm/wasm-constants.js"); 7 load("test/mjsunit/wasm/wasm-constants.js");
8 load("test/mjsunit/wasm/wasm-module-builder.js"); 8 load("test/mjsunit/wasm/wasm-module-builder.js");
9 9
10 function AddFunctions(builder) { 10 function AddFunctions(builder) {
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 kExprGetLocal, 1, // -- 192 kExprGetLocal, 1, // --
193 kExprCallIndirect, 0, kTableZero]) // -- 193 kExprCallIndirect, 0, kTableZero]) // --
194 .exportAs("main"); 194 .exportAs("main");
195 195
196 let m2 = new WebAssembly.Module(builder.toBuffer()); 196 let m2 = new WebAssembly.Module(builder.toBuffer());
197 197
198 // Run 5 trials at different table bases. 198 // Run 5 trials at different table bases.
199 for (let i = 0; i < 5; i++) { 199 for (let i = 0; i < 5; i++) {
200 print(" base = " + i); 200 print(" base = " + i);
201 let table = new WebAssembly.Table({element: "anyfunc", 201 let table = new WebAssembly.Table({element: "anyfunc",
202 initial: kTableSize}); 202 initial: kTableSize,
203 maximum: kTableSize});
203 assertEquals(10, table.length); 204 assertEquals(10, table.length);
204 let i2 = new WebAssembly.Instance(m2, {q: {base: i, table: table, 205 let i2 = new WebAssembly.Instance(m2, {q: {base: i, table: table,
205 js_div: js_div}}); 206 js_div: js_div}});
206 let main = i2.exports.main; 207 let main = i2.exports.main;
207 208
208 for (var j = 0; j < i; j++) { 209 for (var j = 0; j < i; j++) {
209 assertThrows(() => main(0, j)); 210 assertThrows(() => main(0, j));
210 assertSame(null, table.get(j)); 211 assertSame(null, table.get(j));
211 } 212 }
212 213
(...skipping 22 matching lines...) Expand all
235 if (j < kTableSize) assertSame(null, table.get(j)); 236 if (j < kTableSize) assertSame(null, table.get(j));
236 } 237 }
237 } 238 }
238 })(); 239 })();
239 240
240 241
241 (function CumulativeTest() { 242 (function CumulativeTest() {
242 print("CumulativeTest..."); 243 print("CumulativeTest...");
243 244
244 let kTableSize = 10; 245 let kTableSize = 10;
245 let table = new WebAssembly.Table({element: "anyfunc", initial: 10}); 246 let table = new WebAssembly.Table(
247 {element: "anyfunc", initial: kTableSize, maximum: kTableSize});
246 248
247 var builder = new WasmModuleBuilder(); 249 var builder = new WasmModuleBuilder();
248 250
249 builder.addImportedTable("x", "table", kTableSize, kTableSize); 251 builder.addImportedTable("x", "table", kTableSize, kTableSize);
250 let g = builder.addImportedGlobal("x", "base", kWasmI32); 252 let g = builder.addImportedGlobal("x", "base", kWasmI32);
251 let sig_index = builder.addType(kSig_i_v); 253 let sig_index = builder.addType(kSig_i_v);
252 builder.addFunction("g", sig_index) 254 builder.addFunction("g", sig_index)
253 .addBody([ 255 .addBody([
254 kExprGetGlobal, g 256 kExprGetGlobal, g
255 ]); 257 ]);
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 let new_func = instance.exports.wasm; 452 let new_func = instance.exports.wasm;
451 453
452 for (var j = 10; j < 20; j++) { 454 for (var j = 10; j < 20; j++) {
453 table.set(j, new_func); 455 table.set(j, new_func);
454 let func = table.get(j); 456 let func = table.get(j);
455 assertEquals("function", typeof func); 457 assertEquals("function", typeof func);
456 assertSame(new_func, table.get(j)); 458 assertSame(new_func, table.get(j));
457 } 459 }
458 assertThrows(() => table.grow(11)); 460 assertThrows(() => table.grow(11));
459 })(); 461 })();
462
463
464 (function TestImportTooLarge() {
465 print("TestImportTooLarge...");
466 let builder = new WasmModuleBuilder();
467 builder.addImportedTable("t", "t", 1, 2);
468
469 // initial size is too large
470 assertThrows(() => builder.instantiate({t: {t: new WebAssembly.Table(
471 {element: "anyfunc", initial: 3, maximum: 3})}}));
472
473 // maximum size is too large
474 assertThrows(() => builder.instantiate({t: {t: new WebAssembly.Table(
475 {element: "anyfunc", initial: 1, maximum: 4})}}));
476
477 // no maximum
478 assertThrows(() => builder.instantiate({t: {t: new WebAssembly.Table(
479 {element: "anyfunc", initial: 1})}}));
480 })();
OLDNEW
« no previous file with comments | « test/mjsunit/wasm/import-memory.js ('k') | test/mjsunit/wasm/instantiate-module-basic.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698