Validate that ShaderModuleDescriptor has chained descriptor

Bug: chromium:1074575
Change-Id: Ibb124ca8c4771d9b8f2846d3a5f79dca6de8743d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/21360
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index b72ce35..de3a692 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -329,10 +329,14 @@
             return ValidateSpirv(device, descriptor->code, descriptor->codeSize);
         }
 
-        // For now only a single SPIRV or WGSL subdescriptor is allowed.
         const ChainedStruct* chainedDescriptor = descriptor->nextInChain;
+        if (chainedDescriptor == nullptr) {
+            return DAWN_VALIDATION_ERROR("Shader module descriptor missing chained descriptor");
+        }
+        // For now only a single SPIRV or WGSL subdescriptor is allowed.
         if (chainedDescriptor->nextInChain != nullptr) {
-            return DAWN_VALIDATION_ERROR("chained nextInChain must be nullptr");
+            return DAWN_VALIDATION_ERROR(
+                "Shader module descriptor chained nextInChain must be nullptr");
         }
 
         switch (chainedDescriptor->sType) {
diff --git a/src/tests/unittests/validation/ShaderModuleValidationTests.cpp b/src/tests/unittests/validation/ShaderModuleValidationTests.cpp
index 828124f..6a037e9 100644
--- a/src/tests/unittests/validation/ShaderModuleValidationTests.cpp
+++ b/src/tests/unittests/validation/ShaderModuleValidationTests.cpp
@@ -108,3 +108,10 @@
     ASSERT_DEVICE_ERROR(utils::CreateShaderModule(device, utils::SingleShaderStage::Fragment,
                                                   stream.str().c_str()));
 }
+
+// Test that it is invalid to create a shader module with no chained descriptor. (It must be
+// WGSL or SPIRV, not empty)
+TEST_F(ShaderModuleValidationTest, NoChainedDescriptor) {
+  wgpu::ShaderModuleDescriptor desc = {};
+  ASSERT_DEVICE_ERROR(device.CreateShaderModule(&desc));
+}