summaryrefslogtreecommitdiff
path: root/src/wasm/wasm.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2019-04-08 17:26:24 -0700
committerGitHub <noreply@github.com>2019-04-08 17:26:24 -0700
commitb56c691ab87c2cd09255b2617213ec5d8e92a748 (patch)
tree29d8cd53c0481e200a643e68f9bf6d436726ef9b /src/wasm/wasm.cpp
parentc9eeaefbd839cc5176957e479475625fc8b2bcf0 (diff)
downloadbinaryen-b56c691ab87c2cd09255b2617213ec5d8e92a748.tar.gz
binaryen-b56c691ab87c2cd09255b2617213ec5d8e92a748.tar.bz2
binaryen-b56c691ab87c2cd09255b2617213ec5d8e92a748.zip
Better memory fuzzing (#1987)
Hash the contents of all of memory and log that out in random places in the fuzzer, so we are more sensitive there and can catch memory bugs. Fix UB that was uncovered by this in the binary writing code - if a segment is empty, we should not look at &vector[0], and instead use vector.data(). Add Builder::addExport convenience method.
Diffstat (limited to 'src/wasm/wasm.cpp')
-rw-r--r--src/wasm/wasm.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index ea1ff2a7c..8b8285e35 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -863,7 +863,7 @@ FunctionType* Module::addFunctionType(std::unique_ptr<FunctionType> curr) {
return p;
}
-void Module::addExport(Export* curr) {
+Export* Module::addExport(Export* curr) {
if (!curr->name.is()) {
Fatal() << "Module::addExport: empty name";
}
@@ -872,10 +872,11 @@ void Module::addExport(Export* curr) {
}
exports.push_back(std::unique_ptr<Export>(curr));
exportsMap[curr->name] = curr;
+ return curr;
}
// TODO(@warchant): refactor all usages to use variant with unique_ptr
-void Module::addFunction(Function* curr) {
+Function* Module::addFunction(Function* curr) {
if (!curr->name.is()) {
Fatal() << "Module::addFunction: empty name";
}
@@ -884,20 +885,22 @@ void Module::addFunction(Function* curr) {
}
functions.push_back(std::unique_ptr<Function>(curr));
functionsMap[curr->name] = curr;
+ return curr;
}
-void Module::addFunction(std::unique_ptr<Function> curr) {
+Function* Module::addFunction(std::unique_ptr<Function> curr) {
if (!curr->name.is()) {
Fatal() << "Module::addFunction: empty name";
}
if (getFunctionOrNull(curr->name)) {
Fatal() << "Module::addFunction: " << curr->name << " already exists";
}
- functionsMap[curr->name] = curr.get();
+ auto* ret = functionsMap[curr->name] = curr.get();
functions.push_back(std::move(curr));
+ return ret;
}
-void Module::addGlobal(Global* curr) {
+Global* Module::addGlobal(Global* curr) {
if (!curr->name.is()) {
Fatal() << "Module::addGlobal: empty name";
}
@@ -906,6 +909,7 @@ void Module::addGlobal(Global* curr) {
}
globals.push_back(std::unique_ptr<Global>(curr));
globalsMap[curr->name] = curr;
+ return curr;
}
void Module::addStart(const Name& s) {