Socket
Socket
Sign inDemoInstall

@webassemblyjs/wasm-edit

Package Overview
Dependencies
Maintainers
1
Versions
81
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@webassemblyjs/wasm-edit - npm Package Compare versions

Comparing version 1.3.3 to 1.4.0

77

lib/apply.js

@@ -18,2 +18,4 @@ "use strict";

var _helperWasmBytecode = require("@webassemblyjs/helper-wasm-bytecode");
function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

@@ -25,12 +27,6 @@

function assertNodeHasLoc(n) {
if (n.loc == null || n.loc.start == null || n.loc.end == null) {
throw new Error("Internal failure: can not replace node (".concat(JSON.stringify(n.type), ") without loc information"));
}
}
function shiftLocNodeByDelta(node, delta) {
assertNodeHasLoc(node); // $FlowIgnore: assertNodeHasLoc ensures that
(0, _ast.assertHasLoc)(node); // $FlowIgnore: assertHasLoc ensures that
node.loc.start.column += delta; // $FlowIgnore: assertNodeHasLoc ensures that
node.loc.start.column += delta; // $FlowIgnore: assertHasLoc ensures that

@@ -46,4 +42,4 @@ node.loc.end.column += delta;

var deltaElements = 0;
assertNodeHasLoc(oldNode);
var sectionName = (0, _helperWasmSection.getSectionForNode)(newNode);
(0, _ast.assertHasLoc)(oldNode);
var sectionName = (0, _helperWasmBytecode.getSectionForNode)(newNode);
var replacementByteArray = (0, _wasmGen.encodeNode)(newNode);

@@ -54,4 +50,4 @@ /**

uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, // $FlowIgnore: assertNodeHasLoc ensures that
oldNode.loc.start.column, // $FlowIgnore: assertNodeHasLoc ensures that
uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, // $FlowIgnore: assertHasLoc ensures that
oldNode.loc.start.column, // $FlowIgnore: assertHasLoc ensures that
oldNode.loc.end.column, replacementByteArray);

@@ -73,3 +69,3 @@ /**

// These are the old functions locations informations
assertNodeHasLoc(node);
(0, _ast.assertHasLoc)(node);
var oldNodeSize = (0, _wasmGen.encodeNode)(oldNode).length;

@@ -97,3 +93,3 @@ var bodySizeDeltaBytes = replacementByteArray.length - oldNodeSize;

var deltaBytes = replacementByteArray.length - ( // $FlowIgnore: assertNodeHasLoc ensures that
var deltaBytes = replacementByteArray.length - ( // $FlowIgnore: assertHasLoc ensures that
oldNode.loc.end.column - oldNode.loc.start.column); // Init location informations

@@ -111,7 +107,7 @@

}; // Update new node end position
// $FlowIgnore: assertNodeHasLoc ensures that
// $FlowIgnore: assertHasLoc ensures that
newNode.loc.start.column = oldNode.loc.start.column; // $FlowIgnore: assertNodeHasLoc ensures that
newNode.loc.start.column = oldNode.loc.start.column; // $FlowIgnore: assertHasLoc ensures that
newNode.loc.end.column = // $FlowIgnore: assertNodeHasLoc ensures that
newNode.loc.end.column = // $FlowIgnore: assertHasLoc ensures that
oldNode.loc.start.column + replacementByteArray.length;

@@ -128,4 +124,4 @@ return {

assertNodeHasLoc(node);
var sectionName = (0, _helperWasmSection.getSectionForNode)(node);
(0, _ast.assertHasLoc)(node);
var sectionName = (0, _helperWasmBytecode.getSectionForNode)(node);

@@ -154,4 +150,4 @@ if (sectionName === "start") {

var replacement = [];
uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, // $FlowIgnore: assertNodeHasLoc ensures that
node.loc.start.column, // $FlowIgnore: assertNodeHasLoc ensures that
uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, // $FlowIgnore: assertHasLoc ensures that
node.loc.start.column, // $FlowIgnore: assertHasLoc ensures that
node.loc.end.column, replacement);

@@ -161,3 +157,3 @@ /**

*/
// $FlowIgnore: assertNodeHasLoc ensures that
// $FlowIgnore: assertHasLoc ensures that

@@ -175,3 +171,3 @@ var deltaBytes = -(node.loc.end.column - node.loc.start.column);

var sectionName = (0, _helperWasmSection.getSectionForNode)(node);
var sectionName = (0, _helperWasmBytecode.getSectionForNode)(node);
var sectionMetadata = (0, _ast.getSectionMetadata)(ast, sectionName); // Section doesn't exists, we create an empty one

@@ -191,7 +187,5 @@

// we need to manually add it here
// FIXME(sven): preprocess it into the AST?
var start = sectionMetadata.startOffset + sectionMetadata.size.value + (sectionMetadata.size.loc.end.column - sectionMetadata.size.loc.start.column);
var start = (0, _ast.getEndOfSection)(sectionMetadata);
var end = start;
uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newByteArray);
/**

@@ -203,2 +197,27 @@ * Update section

debug("add node=%s section=%s after=%d deltaBytes=%s deltaElements=%s", node.type, sectionName, start, deltaBytes, deltaElements);
uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newByteArray);
node.loc = {
start: {
line: -1,
column: start
},
end: {
line: -1,
column: start + deltaBytes
}
}; // for func add the additional metadata in the AST
if (node.type === "Func") {
// the size is the first byte
// FIXME(sven): handle LEB128 correctly here
var bodySize = newByteArray[0];
node.metadata = {
bodySize: bodySize
};
}
if (node.type !== "IndexInFuncSection") {
(0, _ast.orderedInsertNode)(ast.body[0], node);
}
return {

@@ -219,3 +238,3 @@ uint8Buffer: uint8Buffer,

state = applyUpdate(ast, uint8Buffer, [op.oldNode, op.node]);
sectionName = (0, _helperWasmSection.getSectionForNode)(op.node);
sectionName = (0, _helperWasmBytecode.getSectionForNode)(op.node);
break;

@@ -225,3 +244,3 @@

state = applyDelete(ast, uint8Buffer, op.node);
sectionName = (0, _helperWasmSection.getSectionForNode)(op.node);
sectionName = (0, _helperWasmBytecode.getSectionForNode)(op.node);
break;

@@ -231,3 +250,3 @@

state = applyAdd(ast, uint8Buffer, op.node);
sectionName = (0, _helperWasmSection.getSectionForNode)(op.node);
sectionName = (0, _helperWasmBytecode.getSectionForNode)(op.node);
break;

@@ -234,0 +253,0 @@

@@ -7,3 +7,5 @@ "use strict";

exports.edit = edit;
exports.editWithAST = editWithAST;
exports.add = add;
exports.addWithAST = addWithAST;

@@ -18,4 +20,2 @@ var _wasmParser = require("@webassemblyjs/wasm-parser");

var _helperWasmSection = require("@webassemblyjs/helper-wasm-section");
var _helperWasmBytecode = _interopRequireDefault(require("@webassemblyjs/helper-wasm-bytecode"));

@@ -31,8 +31,2 @@

var decoderOpts = {
// FIXME(sven): detection based on the Instr doesn't work for add()
// ignoreCodeSection: true,
ignoreDataSection: true
};
function preprocess(ab) {

@@ -45,4 +39,6 @@ var optBin = (0, _wasmOpt.shrinkPaddedLEB128)(new Uint8Array(ab));

nodes.sort(function (a, b) {
var sectionA = (0, _helperWasmSection.getSectionForNode)(a);
var sectionB = (0, _helperWasmSection.getSectionForNode)(b);
var sectionA = _helperWasmBytecode.default.getSectionForNode(a);
var sectionB = _helperWasmBytecode.default.getSectionForNode(b);
var aId = _helperWasmBytecode.default.sections[sectionA];

@@ -61,5 +57,9 @@ var bId = _helperWasmBytecode.default.sections[sectionB];

function edit(ab, visitors) {
ab = preprocess(ab);
var ast = (0, _wasmParser.decode)(ab);
return editWithAST(ast, ab, visitors);
}
function editWithAST(ast, ab, visitors) {
var operations = [];
ab = preprocess(ab);
var ast = (0, _wasmParser.decode)(ab, decoderOpts);
var uint8Buffer = new Uint8Array(ab);

@@ -93,6 +93,10 @@ var nodeBefore;

function add(ab, newNodes) {
ab = preprocess(ab); // Sort nodes by insertion order
ab = preprocess(ab);
var ast = (0, _wasmParser.decode)(ab);
return addWithAST(ast, ab, newNodes);
}
function addWithAST(ast, ab, newNodes) {
// Sort nodes by insertion order
sortBySectionOrder(newNodes);
var ast = (0, _wasmParser.decode)(ab, decoderOpts);
var uint8Buffer = new Uint8Array(ab); // Map node into operations

@@ -99,0 +103,0 @@

{
"name": "@webassemblyjs/wasm-edit",
"version": "1.3.3",
"version": "1.4.0",
"description": "",

@@ -19,15 +19,15 @@ "main": "lib/index.js",

"dependencies": {
"@webassemblyjs/ast": "1.3.3",
"@webassemblyjs/helper-buffer": "1.3.3",
"@webassemblyjs/helper-wasm-bytecode": "1.3.3",
"@webassemblyjs/helper-wasm-section": "1.3.3",
"@webassemblyjs/wasm-gen": "1.3.3",
"@webassemblyjs/wasm-opt": "1.3.3",
"@webassemblyjs/wasm-parser": "1.3.3",
"@webassemblyjs/wast-printer": "1.3.3",
"@webassemblyjs/ast": "1.4.0",
"@webassemblyjs/helper-buffer": "1.4.0",
"@webassemblyjs/helper-wasm-bytecode": "1.4.0",
"@webassemblyjs/helper-wasm-section": "1.4.0",
"@webassemblyjs/wasm-gen": "1.4.0",
"@webassemblyjs/wasm-opt": "1.4.0",
"@webassemblyjs/wasm-parser": "1.4.0",
"@webassemblyjs/wast-printer": "1.4.0",
"debug": "^3.1.0"
},
"devDependencies": {
"@webassemblyjs/helper-test-framework": "1.3.3"
"@webassemblyjs/helper-test-framework": "1.4.0"
}
}

@@ -76,1 +76,12 @@ # @webassemblyjs/wasm-edit

```
## Providing the AST
Providing an AST allows you to handle the decoding yourself, here is the API:
```js
addWithAST(Program, ArrayBuffer, Array<Node>): ArrayBuffer;
editWithAST(Program, ArrayBuffer, visitors): ArrayBuffer;
```
Note that the AST will be updated in-place.
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc