diff --git a/env/env_yaml.cc b/env/env_yaml.cc index 0035709e9..5e7c9631d 100644 --- a/env/env_yaml.cc +++ b/env/env_yaml.cc @@ -998,6 +998,15 @@ void EmitFunctionConfigs(const Config& env_config, YAML::Emitter& out) { absl::StatusOr EnvConfigFromYaml(const std::string& yaml) { Config config; CEL_ASSIGN_OR_RETURN(YAML::Node root, LoadYaml(yaml)); + if (!root.IsDefined() || root.IsNull()) { + return config; + } + + if (!root.IsMap()) { + return absl::InvalidArgumentError(FormatYamlErrorMessage( + yaml, "Invalid CEL environment config YAML", root.Mark())); + } + CEL_RETURN_IF_ERROR(ParseName(config, yaml, root)); CEL_RETURN_IF_ERROR(ParseContainerConfig(config, yaml, root)); CEL_RETURN_IF_ERROR(ParseExtensionConfigs(config, yaml, root)); diff --git a/env/env_yaml_test.cc b/env/env_yaml_test.cc index 828a39b48..b34c25254 100644 --- a/env/env_yaml_test.cc +++ b/env/env_yaml_test.cc @@ -528,6 +528,12 @@ TEST_P(EnvYamlParseTest, EnvYamlSyntaxError) { INSTANTIATE_TEST_SUITE_P( EnvYamlParseTest, EnvYamlParseTest, ::testing::Values( + ParseTestCase{ + .yaml = R"yaml( invalid yaml )yaml", + .expected_error = "1:2: Invalid CEL environment config YAML\n" + "| invalid yaml \n" + "| ^", + }, ParseTestCase{ .yaml = R"yaml( name: