diff options
author | Daniel Wirtz <dcode@dcode.io> | 2017-11-01 23:46:07 +0100 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-11-01 15:46:07 -0700 |
commit | d38eeadc55a4b3a97b2879ba3d13a50224c28df6 (patch) | |
tree | 3e7c54475a3b3e155c258b11d32ecda09230501e /src/tools | |
parent | d328024d8c435379f248b0a257df2aedbe1c1b84 (diff) | |
download | binaryen-d38eeadc55a4b3a97b2879ba3d13a50224c28df6.tar.gz binaryen-d38eeadc55a4b3a97b2879ba3d13a50224c28df6.tar.bz2 binaryen-d38eeadc55a4b3a97b2879ba3d13a50224c28df6.zip |
Restrict validation output to just validation errors in the API (#1253)
Do not print the entire and possibly very large module when validation fails. Leave printing to tools using the validator, instead of always doing it in the validator where it can't be overridden.
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/asm2wasm.cpp | 1 | ||||
-rw-r--r-- | src/tools/s2wasm.cpp | 4 | ||||
-rw-r--r-- | src/tools/wasm-as.cpp | 1 | ||||
-rw-r--r-- | src/tools/wasm-merge.cpp | 1 | ||||
-rw-r--r-- | src/tools/wasm-opt.cpp | 14 | ||||
-rw-r--r-- | src/tools/wasm-shell.cpp | 6 |
6 files changed, 23 insertions, 4 deletions
diff --git a/src/tools/asm2wasm.cpp b/src/tools/asm2wasm.cpp index 4ec68283f..3f70e0388 100644 --- a/src/tools/asm2wasm.cpp +++ b/src/tools/asm2wasm.cpp @@ -207,6 +207,7 @@ int main(int argc, const char *argv[]) { } if (!WasmValidator().validate(wasm, options.passOptions.features)) { + WasmPrinter::printModule(&wasm); Fatal() << "error in validating output"; } diff --git a/src/tools/s2wasm.cpp b/src/tools/s2wasm.cpp index 37604e74b..96d9ae5ce 100644 --- a/src/tools/s2wasm.cpp +++ b/src/tools/s2wasm.cpp @@ -194,8 +194,10 @@ int main(int argc, const char *argv[]) { if (options.extra["validate"] != "none") { if (options.debug) std::cerr << "Validating..." << std::endl; - if (!wasm::WasmValidator().validate(linker.getOutput().wasm, + Module* output = &linker.getOutput().wasm; + if (!wasm::WasmValidator().validate(*output, WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) { + WasmPrinter::printModule(output); Fatal() << "Error: linked module is not valid.\n"; } } diff --git a/src/tools/wasm-as.cpp b/src/tools/wasm-as.cpp index d456f43fd..0e053e05a 100644 --- a/src/tools/wasm-as.cpp +++ b/src/tools/wasm-as.cpp @@ -94,6 +94,7 @@ int main(int argc, const char *argv[]) { if (options.debug) std::cerr << "Validating..." << std::endl; if (!wasm::WasmValidator().validate(wasm, Feature::All, WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) { + WasmPrinter::printModule(&wasm); Fatal() << "Error: input module is not valid.\n"; } } diff --git a/src/tools/wasm-merge.cpp b/src/tools/wasm-merge.cpp index 441cdc0f7..7a713675f 100644 --- a/src/tools/wasm-merge.cpp +++ b/src/tools/wasm-merge.cpp @@ -627,6 +627,7 @@ int main(int argc, const char* argv[]) { } if (!WasmValidator().validate(output)) { + WasmPrinter::printModule(&output); Fatal() << "error in validating output"; } diff --git a/src/tools/wasm-opt.cpp b/src/tools/wasm-opt.cpp index 7c2a3a35a..91e1633f0 100644 --- a/src/tools/wasm-opt.cpp +++ b/src/tools/wasm-opt.cpp @@ -129,6 +129,7 @@ int main(int argc, const char* argv[]) { } if (!WasmValidator().validate(wasm, features)) { + WasmPrinter::printModule(&wasm); Fatal() << "error in validating input"; } } else { @@ -136,6 +137,7 @@ int main(int argc, const char* argv[]) { TranslateToFuzzReader reader(wasm); reader.read(options.extra["infile"]); if (!WasmValidator().validate(wasm, features)) { + WasmPrinter::printModule(&wasm); std::cerr << "translate-to-fuzz must always generate a valid module"; abort(); } @@ -176,7 +178,11 @@ int main(int argc, const char* argv[]) { if (options.runningPasses()) { if (options.debug) std::cerr << "running passes...\n"; options.runPasses(wasm); - assert(WasmValidator().validate(wasm, features)); + bool valid = WasmValidator().validate(wasm, features); + if (!valid) { + WasmPrinter::printModule(&wasm); + } + assert(valid); } if (fuzzExec) { @@ -192,7 +198,11 @@ int main(int argc, const char* argv[]) { auto input = buffer.getAsChars(); WasmBinaryBuilder parser(second, input, false); parser.read(); - assert(WasmValidator().validate(second, features)); + bool valid = WasmValidator().validate(second, features); + if (!valid) { + WasmPrinter::printModule(&second); + } + assert(valid); } results.check(*compare); } diff --git a/src/tools/wasm-shell.cpp b/src/tools/wasm-shell.cpp index cd8c27437..965887cf9 100644 --- a/src/tools/wasm-shell.cpp +++ b/src/tools/wasm-shell.cpp @@ -287,7 +287,11 @@ int main(int argc, const char* argv[]) { builders[moduleName].swap(builder); modules[moduleName].swap(module); i++; - assert(WasmValidator().validate(*modules[moduleName])); + bool valid = WasmValidator().validate(*modules[moduleName]); + if (!valid) { + WasmPrinter::printModule(modules[moduleName].get()); + } + assert(valid); run_asserts(moduleName, &i, &checked, modules[moduleName].get(), &root, builders[moduleName].get(), entry); } else { run_asserts(Name(), &i, &checked, nullptr, &root, nullptr, entry); |