[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 {