diff options
author | Alon Zakai <alonzakai@gmail.com> | 2019-04-08 17:26:24 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-08 17:26:24 -0700 |
commit | b56c691ab87c2cd09255b2617213ec5d8e92a748 (patch) | |
tree | 29d8cd53c0481e200a643e68f9bf6d436726ef9b /src/wasm/wasm.cpp | |
parent | c9eeaefbd839cc5176957e479475625fc8b2bcf0 (diff) | |
download | binaryen-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.cpp | 14 |
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) { |