Skip to content

Commit d38eead

Browse files
dcodeIOkripken
authored andcommitted
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.
1 parent d328024 commit d38eead

File tree

8 files changed

+25
-6
lines changed

8 files changed

+25
-6
lines changed

src/passes/pass.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ void PassRunner::run() {
232232
// validate, ignoring the time
233233
std::cerr << "[PassRunner] (validating)\n";
234234
if (!WasmValidator().validate(*wasm, options.features, validationFlags)) {
235+
WasmPrinter::printModule(wasm);
235236
if (passDebug >= 2) {
236237
std::cerr << "Last pass (" << pass->name << ") broke validation. Here is the module before: \n" << moduleBefore.str() << "\n";
237238
} else {
@@ -247,6 +248,7 @@ void PassRunner::run() {
247248
// validate
248249
std::cerr << "[PassRunner] (final validation)\n";
249250
if (!WasmValidator().validate(*wasm, options.features, validationFlags)) {
251+
WasmPrinter::printModule(wasm);
250252
std::cerr << "final module does not validate\n";
251253
abort();
252254
}

src/tools/asm2wasm.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ int main(int argc, const char *argv[]) {
207207
}
208208

209209
if (!WasmValidator().validate(wasm, options.passOptions.features)) {
210+
WasmPrinter::printModule(&wasm);
210211
Fatal() << "error in validating output";
211212
}
212213

src/tools/s2wasm.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,10 @@ int main(int argc, const char *argv[]) {
194194

195195
if (options.extra["validate"] != "none") {
196196
if (options.debug) std::cerr << "Validating..." << std::endl;
197-
if (!wasm::WasmValidator().validate(linker.getOutput().wasm,
197+
Module* output = &linker.getOutput().wasm;
198+
if (!wasm::WasmValidator().validate(*output,
198199
WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) {
200+
WasmPrinter::printModule(output);
199201
Fatal() << "Error: linked module is not valid.\n";
200202
}
201203
}

src/tools/wasm-as.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ int main(int argc, const char *argv[]) {
9494
if (options.debug) std::cerr << "Validating..." << std::endl;
9595
if (!wasm::WasmValidator().validate(wasm, Feature::All,
9696
WasmValidator::Globally | (options.extra["validate"] == "web" ? WasmValidator::Web : 0))) {
97+
WasmPrinter::printModule(&wasm);
9798
Fatal() << "Error: input module is not valid.\n";
9899
}
99100
}

src/tools/wasm-merge.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,7 @@ int main(int argc, const char* argv[]) {
627627
}
628628

629629
if (!WasmValidator().validate(output)) {
630+
WasmPrinter::printModule(&output);
630631
Fatal() << "error in validating output";
631632
}
632633

src/tools/wasm-opt.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,15 @@ int main(int argc, const char* argv[]) {
129129
}
130130

131131
if (!WasmValidator().validate(wasm, features)) {
132+
WasmPrinter::printModule(&wasm);
132133
Fatal() << "error in validating input";
133134
}
134135
} else {
135136
// translate-to-fuzz
136137
TranslateToFuzzReader reader(wasm);
137138
reader.read(options.extra["infile"]);
138139
if (!WasmValidator().validate(wasm, features)) {
140+
WasmPrinter::printModule(&wasm);
139141
std::cerr << "translate-to-fuzz must always generate a valid module";
140142
abort();
141143
}
@@ -176,7 +178,11 @@ int main(int argc, const char* argv[]) {
176178
if (options.runningPasses()) {
177179
if (options.debug) std::cerr << "running passes...\n";
178180
options.runPasses(wasm);
179-
assert(WasmValidator().validate(wasm, features));
181+
bool valid = WasmValidator().validate(wasm, features);
182+
if (!valid) {
183+
WasmPrinter::printModule(&wasm);
184+
}
185+
assert(valid);
180186
}
181187

182188
if (fuzzExec) {
@@ -192,7 +198,11 @@ int main(int argc, const char* argv[]) {
192198
auto input = buffer.getAsChars();
193199
WasmBinaryBuilder parser(second, input, false);
194200
parser.read();
195-
assert(WasmValidator().validate(second, features));
201+
bool valid = WasmValidator().validate(second, features);
202+
if (!valid) {
203+
WasmPrinter::printModule(&second);
204+
}
205+
assert(valid);
196206
}
197207
results.check(*compare);
198208
}

src/tools/wasm-shell.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,11 @@ int main(int argc, const char* argv[]) {
287287
builders[moduleName].swap(builder);
288288
modules[moduleName].swap(module);
289289
i++;
290-
assert(WasmValidator().validate(*modules[moduleName]));
290+
bool valid = WasmValidator().validate(*modules[moduleName]);
291+
if (!valid) {
292+
WasmPrinter::printModule(modules[moduleName].get());
293+
}
294+
assert(valid);
291295
run_asserts(moduleName, &i, &checked, modules[moduleName].get(), &root, builders[moduleName].get(), entry);
292296
} else {
293297
run_asserts(Name(), &i, &checked, nullptr, &root, nullptr, entry);

src/wasm/wasm-validator.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,8 +1036,6 @@ bool WasmValidator::validate(Module& module, FeatureSet features, Flags flags) {
10361036
std::cerr << info.getStream(func.get()).str();
10371037
}
10381038
std::cerr << info.getStream(nullptr).str();
1039-
// also print the module
1040-
WasmPrinter::printModule(&module, std::cerr);
10411039
}
10421040
return info.valid.load();
10431041
}

0 commit comments

Comments
 (0)