[xDS] fix fuzzer-found failure in ClusterSpecifierPlugin handling (#33552)

Fixes b/288542307.
diff --git a/src/core/ext/xds/xds_route_config.cc b/src/core/ext/xds/xds_route_config.cc
index f2dc8ba..2f819b7 100644
--- a/src/core/ext/xds/xds_route_config.cc
+++ b/src/core/ext/xds/xds_route_config.cc
@@ -349,6 +349,10 @@
     const envoy_config_core_v3_TypedExtensionConfig* typed_extension_config =
         envoy_config_route_v3_ClusterSpecifierPlugin_extension(
             cluster_specifier_plugin[i]);
+    if (typed_extension_config == nullptr) {
+      errors->AddError("field not present");
+      continue;
+    }
     std::string name = UpbStringToStdString(
         envoy_config_core_v3_TypedExtensionConfig_name(typed_extension_config));
     if (cluster_specifier_plugin_map.find(name) !=
diff --git a/test/core/xds/xds_client_corpora/rls_missing_typed_extension_config b/test/core/xds/xds_client_corpora/rls_missing_typed_extension_config
new file mode 100644
index 0000000..cd2a6df
--- /dev/null
+++ b/test/core/xds/xds_client_corpora/rls_missing_typed_extension_config
@@ -0,0 +1,26 @@
+bootstrap: "{\"xds_servers\": [{\"server_uri\":\"xds.example.com:-257\", \"channel_creds\":[{\"type\": \"fake\"}]}]}"
+actions {
+  start_watch {
+    resource_type {
+      route_config {
+      }
+    }
+  }
+}
+actions {
+  send_message_to_client {
+    stream_id {
+      ads {
+      }
+    }
+    response {
+      version_info: "grpc.lookup.v1.RouteLookup"
+      resources {
+        type_url: "envoy.config.route.v3.RouteConfiguration"
+        value: "\010\001b\000"
+      }
+      type_url: "envoy.config.route.v3.RouteConfiguration"
+      nonce: "/@\001\000\\\000\000x141183468234106731687303715884105729"
+    }
+  }
+}