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

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

Issue 2640453003: [wasm] Fix and tighten memory validation (Closed)
Patch Set: Comments 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/memory-size.js ('k') | test/mjsunit/wasm/trap-location.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 // clang-format off 5 // clang-format off
6 // Flags: --expose-wasm 6 // Flags: --expose-wasm
7 7
8 load("test/mjsunit/wasm/wasm-constants.js"); 8 load("test/mjsunit/wasm/wasm-constants.js");
9 load("test/mjsunit/wasm/wasm-module-builder.js"); 9 load("test/mjsunit/wasm/wasm-module-builder.js");
10 10
(...skipping 24 matching lines...) Expand all
35 35
36 36
37 var stack; 37 var stack;
38 function STACK() { 38 function STACK() {
39 var e = new Error(); 39 var e = new Error();
40 stack = e.stack; 40 stack = e.stack;
41 } 41 }
42 42
43 var builder = new WasmModuleBuilder(); 43 var builder = new WasmModuleBuilder();
44 44
45 builder.addMemory(0, 1, false);
46
45 builder.addImport("mod", "func", kSig_v_v); 47 builder.addImport("mod", "func", kSig_v_v);
46 48
47 builder.addFunction("main", kSig_v_v) 49 builder.addFunction("main", kSig_v_v)
48 .addBody([kExprCallFunction, 0]) 50 .addBody([kExprCallFunction, 0])
49 .exportAs("main"); 51 .exportAs("main");
50 52
51 builder.addFunction("exec_unreachable", kSig_v_v) 53 builder.addFunction("exec_unreachable", kSig_v_v)
52 .addBody([kExprUnreachable]) 54 .addBody([kExprUnreachable])
53 .exportAs("exec_unreachable"); 55 .exportAs("exec_unreachable");
54 56
55 // Make this function unnamed, just to test also this case. 57 // Make this function unnamed, just to test also this case.
56 var mem_oob_func = builder.addFunction(undefined, kSig_i_v) 58 var mem_oob_func = builder.addFunction(undefined, kSig_i_v)
57 // Access the memory at offset -1, to provoke a trap. 59 // Access the memory at offset -1, to provoke a trap.
58 .addBody([kExprI32Const, 0x7f, kExprI32LoadMem8S, 0, 0]) 60 .addBody([kExprI32Const, 0x7f, kExprI32LoadMem8S, 0, 0])
59 .exportAs("mem_out_of_bounds"); 61 .exportAs("mem_out_of_bounds");
60 62
61 // Call the mem_out_of_bounds function, in order to have two WASM stack frames. 63 // Call the mem_out_of_bounds function, in order to have two WASM stack frames.
62 builder.addFunction("call_mem_out_of_bounds", kSig_i_v) 64 builder.addFunction("call_mem_out_of_bounds", kSig_i_v)
63 .addBody([kExprCallFunction, mem_oob_func.index]) 65 .addBody([kExprCallFunction, mem_oob_func.index])
64 .exportAs("call_mem_out_of_bounds"); 66 .exportAs("call_mem_out_of_bounds");
65 67
66 var module = builder.instantiate({mod: {func: STACK}}); 68 var module = builder.instantiate({mod: {func: STACK}});
67 69
68 (function testSimpleStack() { 70 (function testSimpleStack() {
69 var expected_string = "Error\n" + 71 var expected_string = "Error\n" +
70 // The line numbers below will change as this test gains / loses lines.. 72 // The line numbers below will change as this test gains / loses lines..
71 " at STACK (stack.js:39:11)\n" + // -- 73 " at STACK (stack.js:39:11)\n" + // --
72 " at main (<WASM>[1]+1)\n" + // -- 74 " at main (<WASM>[1]+1)\n" + // --
73 " at testSimpleStack (stack.js:76:18)\n" + // -- 75 " at testSimpleStack (stack.js:78:18)\n" + // --
74 " at stack.js:78:3"; // -- 76 " at stack.js:80:3"; // --
75 77
76 module.exports.main(); 78 module.exports.main();
77 assertEquals(expected_string, stripPath(stack)); 79 assertEquals(expected_string, stripPath(stack));
78 })(); 80 })();
79 81
80 // For the remaining tests, collect the Callsite objects instead of just a 82 // For the remaining tests, collect the Callsite objects instead of just a
81 // string: 83 // string:
82 Error.prepareStackTrace = function(error, frames) { 84 Error.prepareStackTrace = function(error, frames) {
83 return frames; 85 return frames;
84 }; 86 };
85 87
86 (function testStackFrames() { 88 (function testStackFrames() {
87 module.exports.main(); 89 module.exports.main();
88 90
89 verifyStack(stack, [ 91 verifyStack(stack, [
90 // isWasm function line pos file 92 // isWasm function line pos file
91 [ false, "STACK", 39, 0, "stack.js"], 93 [ false, "STACK", 39, 0, "stack.js"],
92 [ true, "main", 1, 1, null], 94 [ true, "main", 1, 1, null],
93 [ false, "testStackFrames", 87, 0, "stack.js"], 95 [ false, "testStackFrames", 89, 0, "stack.js"],
94 [ false, null, 96, 0, "stack.js"] 96 [ false, null, 98, 0, "stack.js"]
95 ]); 97 ]);
96 })(); 98 })();
97 99
98 (function testWasmUnreachable() { 100 (function testWasmUnreachable() {
99 try { 101 try {
100 module.exports.exec_unreachable(); 102 module.exports.exec_unreachable();
101 fail("expected wasm exception"); 103 fail("expected wasm exception");
102 } catch (e) { 104 } catch (e) {
103 assertContains("unreachable", e.message); 105 assertContains("unreachable", e.message);
104 verifyStack(e.stack, [ 106 verifyStack(e.stack, [
105 // isWasm function line pos file 107 // isWasm function line pos file
106 [ true, "exec_unreachable", 2, 1, null], 108 [ true, "exec_unreachable", 2, 1, null],
107 [ false, "testWasmUnreachable", 100, 0, "stack.js"], 109 [ false, "testWasmUnreachable", 102, 0, "stack.js"],
108 [ false, null, 111, 0, "stack.js"] 110 [ false, null, 113, 0, "stack.js"]
109 ]); 111 ]);
110 } 112 }
111 })(); 113 })();
112 114
113 (function testWasmMemOutOfBounds() { 115 (function testWasmMemOutOfBounds() {
114 try { 116 try {
115 module.exports.call_mem_out_of_bounds(); 117 module.exports.call_mem_out_of_bounds();
116 fail("expected wasm exception"); 118 fail("expected wasm exception");
117 } catch (e) { 119 } catch (e) {
118 assertContains("out of bounds", e.message); 120 assertContains("out of bounds", e.message);
119 verifyStack(e.stack, [ 121 verifyStack(e.stack, [
120 // isWasm function line pos file 122 // isWasm function line pos file
121 [ true, "", 3, 3, null], 123 [ true, "", 3, 3, null],
122 [ true, "call_mem_out_of_bounds", 4, 1, null], 124 [ true, "call_mem_out_of_bounds", 4, 1, null],
123 [ false, "testWasmMemOutOfBounds", 115, 0, "stack.js"], 125 [ false, "testWasmMemOutOfBounds", 117, 0, "stack.js"],
124 [ false, null, 127, 0, "stack.js"] 126 [ false, null, 129, 0, "stack.js"]
125 ]); 127 ]);
126 } 128 }
127 })(); 129 })();
128 130
129 131
130 (function testStackOverflow() { 132 (function testStackOverflow() {
131 print("testStackOverflow"); 133 print("testStackOverflow");
132 var builder = new WasmModuleBuilder(); 134 var builder = new WasmModuleBuilder();
133 135
134 var sig_index = builder.addType(kSig_v_v); 136 var sig_index = builder.addType(kSig_v_v);
(...skipping 13 matching lines...) Expand all
148 assertTrue(e.stack.length >= 4, "expected at least 4 stack entries"); 150 assertTrue(e.stack.length >= 4, "expected at least 4 stack entries");
149 verifyStack(e.stack.splice(0, 4), [ 151 verifyStack(e.stack.splice(0, 4), [
150 // isWasm function line pos file 152 // isWasm function line pos file
151 [ true, "recursion", 0, 0, null], 153 [ true, "recursion", 0, 0, null],
152 [ true, "recursion", 0, 3, null], 154 [ true, "recursion", 0, 3, null],
153 [ true, "recursion", 0, 3, null], 155 [ true, "recursion", 0, 3, null],
154 [ true, "recursion", 0, 3, null] 156 [ true, "recursion", 0, 3, null]
155 ]); 157 ]);
156 } 158 }
157 })(); 159 })();
OLDNEW
« no previous file with comments | « test/mjsunit/wasm/memory-size.js ('k') | test/mjsunit/wasm/trap-location.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698