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