Fix invalid atomic type in protobuf decode.

Guard against invalid element types for an atomic in protobuf decode.

Fixed: 447445688
Change-Id: I956cd03e44b4c9c9e0a879adcdc044508dee9686
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/263875
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Auto-Submit: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/core/ir/binary/decode.cc b/src/tint/lang/core/ir/binary/decode.cc
index ef9e4f9..106d75f 100644
--- a/src/tint/lang/core/ir/binary/decode.cc
+++ b/src/tint/lang/core/ir/binary/decode.cc
@@ -883,8 +883,13 @@
         return mod_out_.Types().Struct(name, std::move(members_out));
     }
 
-    const type::Atomic* CreateTypeAtomic(const pb::TypeAtomic& atomic_in) {
-        return mod_out_.Types().atomic(Type(atomic_in.type()));
+    const type::Type* CreateTypeAtomic(const pb::TypeAtomic& atomic_in) {
+        const auto* el_ty = Type(atomic_in.type());
+        if (el_ty == nullptr) {
+            err_ << "invalid atomic element type\n";
+            return mod_out_.Types().invalid();
+        }
+        return mod_out_.Types().atomic(el_ty);
     }
 
     const type::Type* CreateTypeArray(const pb::TypeArray& array_in) {