Fix null char in AST fuzzer
There is no need to take the null char into account when copying
mutated data with memcpy in AST fuzzer.
Change-Id: I78530c3679a31f252d2eaebd6de2a1261d346a57
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/59449
Auto-Submit: Vasyl Teliman <vasniktel@gmail.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Vasyl Teliman <vasniktel@gmail.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/fuzzers/tint_ast_fuzzer/fuzzer.cc b/fuzzers/tint_ast_fuzzer/fuzzer.cc
index a6c3129..218dce5 100644
--- a/fuzzers/tint_ast_fuzzer/fuzzer.cc
+++ b/fuzzers/tint_ast_fuzzer/fuzzer.cc
@@ -70,14 +70,17 @@
return 0;
}
- // +1 to account for \0 at the end of a string.
- auto mutated_size = result.wgsl.size() + 1;
- if (mutated_size > max_size) {
+ if (result.wgsl.size() > max_size) {
return 0;
}
- std::memcpy(data, result.wgsl.data(), mutated_size);
- return mutated_size;
+ // No need to worry about the \0 here. The reason is that if \0 is included by
+ // developer by mistake, it will be considered a part of the string and will
+ // cause all sorts of strange bugs. Thus, unless `data` below is used as a raw
+ // C string, the \0 symbol should be ignored.
+ std::memcpy( // NOLINT - clang-tidy warns about lack of null termination.
+ data, result.wgsl.data(), result.wgsl.size());
+ return result.wgsl.size();
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {