| const verbose = false; |
| |
| { |
| // The simplest module with a DataView offset. |
| let buffer = new Uint8Array(16); |
| buffer[ 8] = 0x00; // \0 |
| buffer[ 9] = 0x61; // a |
| buffer[10] = 0x73; // s |
| buffer[11] = 0x6d; // m |
| buffer[12] = 0x01; // version |
| buffer[13] = 0x00; // version |
| buffer[14] = 0x00; // version |
| buffer[15] = 0x00; // version |
| const view = new DataView(buffer.buffer, 8); |
| const module = new WebAssembly.Module(view); |
| const instance = new WebAssembly.Instance(module); |
| } |
| |
| { |
| // A bunch of random offsets into large buffers with mostly valid content. |
| const headerSize = 16; |
| const roundToHeaderSize = s => Math.round(s / headerSize) * headerSize; |
| for (let attempt = 0; attempt < 100; ++attempt) { |
| const bufferSize = Math.max(roundToHeaderSize(Math.random() * 0xffff), headerSize * 2); |
| let buffer = new Uint8Array(bufferSize); |
| for (let i = 0; i < bufferSize; i += headerSize) { |
| buffer[ 0 + i] = 0x00; // \0 |
| buffer[ 1 + i] = 0x61; // a |
| buffer[ 2 + i] = 0x73; // s |
| buffer[ 3 + i] = 0x6d; // m |
| buffer[ 4 + i] = 0x01; // version |
| buffer[ 5 + i] = 0x00; // version |
| buffer[ 6 + i] = 0x00; // version |
| buffer[ 7 + i] = 0x00; // version |
| buffer[ 8 + i] = 0x00; // ID = custom |
| buffer[ 9 + i] = 0x80 | Math.round(Math.random() * 0x7f); // section byte size, LEB128 |
| buffer[10 + i] = 0x80 | Math.round(Math.random() * 0x7f); // section byte size, LEB128 |
| buffer[11 + i] = 0x00 | Math.round(Math.random() * 0x7f); // section byte size, LEB128 |
| buffer[12 + i] = 0x04; // custom section name length, LEB128 |
| buffer[13 + i] = 0x42; // B |
| buffer[14 + i] = 0x4f; // O |
| buffer[15 + i] = 0X4f; // O |
| buffer[16 + i] = 0x4d; // M |
| } |
| const viewOffset = roundToHeaderSize(Math.random() * bufferSize); |
| if (verbose) |
| print("Buffer size: ", bufferSize, " view offset: ", viewOffset, " view size: ", bufferSize - viewOffset); |
| const view = new DataView(buffer.buffer, viewOffset); |
| try { |
| const module = new WebAssembly.Module(view); |
| const instance = new WebAssembly.Instance(module); |
| } catch (e) { |
| if (verbose) |
| print(e); |
| } |
| } |
| } |