[tint][fuzz] Don't attempt to memcpy from nullptr
Change-Id: Ifb6f0827552e72738249a173232a1276c91a08e1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/164664
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Auto-Submit: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/cmd/fuzz/ir/fuzz.h b/src/tint/cmd/fuzz/ir/fuzz.h
index 410e1c0..36d8c02 100644
--- a/src/tint/cmd/fuzz/ir/fuzz.h
+++ b/src/tint/cmd/fuzz/ir/fuzz.h
@@ -53,6 +53,9 @@
static IRFuzzer Create(std::string_view name, void (*fn)(core::ir::Module&, ARGS...)) {
if constexpr (sizeof...(ARGS) > 0) {
auto fn_with_decode = [fn](core::ir::Module& module, Slice<const std::byte> data) {
+ if (!data.data) {
+ return;
+ }
bytes::BufferReader reader{data};
if (auto data_args = bytes::Decode<std::tuple<std::decay_t<ARGS>...>>(reader)) {
auto all_args =
diff --git a/src/tint/cmd/fuzz/wgsl/fuzz.h b/src/tint/cmd/fuzz/wgsl/fuzz.h
index 7f425be..da2efe4 100644
--- a/src/tint/cmd/fuzz/wgsl/fuzz.h
+++ b/src/tint/cmd/fuzz/wgsl/fuzz.h
@@ -50,6 +50,9 @@
static ProgramFuzzer Create(std::string_view name, void (*fn)(const Program&, ARGS...)) {
if constexpr (sizeof...(ARGS) > 0) {
auto fn_with_decode = [fn](const Program& program, Slice<const std::byte> data) {
+ if (!data.data) {
+ return;
+ }
bytes::BufferReader reader{data};
if (auto data_args = bytes::Decode<std::tuple<std::decay_t<ARGS>...>>(reader)) {
auto all_args =
diff --git a/src/tint/utils/bytes/reader.h b/src/tint/utils/bytes/reader.h
index a9f0bfe..9e58c15 100644
--- a/src/tint/utils/bytes/reader.h
+++ b/src/tint/utils/bytes/reader.h
@@ -121,12 +121,16 @@
/// Constructor
/// @param data the data to read from
/// @param size the number of bytes in the buffer
- BufferReader(const std::byte* data, size_t size) : data_(data), bytes_remaining_(size) {}
+ BufferReader(const std::byte* data, size_t size) : data_(data), bytes_remaining_(size) {
+ TINT_ASSERT(data);
+ }
/// Constructor
/// @param slice the byte slice to read from
explicit BufferReader(Slice<const std::byte> slice)
- : data_(slice.data), bytes_remaining_(slice.len) {}
+ : data_(slice.data), bytes_remaining_(slice.len) {
+ TINT_ASSERT(slice.data);
+ }
/// @copydoc Reader::Read
size_t Read(std::byte* out, size_t count) override {