Skip to content

Commit 2f6f308

Browse files
TristonianJonescopybara-github
authored andcommitted
Ensure empty YAML inputs yield checked exceptions
PiperOrigin-RevId: 682755056
1 parent d80531c commit 2f6f308

File tree

4 files changed

+18
-6
lines changed

4 files changed

+18
-6
lines changed

policy/src/main/java/dev/cel/policy/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ java_library(
117117
":value_string",
118118
":yaml_helper",
119119
"//common:compiler_common",
120-
"//common:source_location",
121120
"//common/internal",
122121
"@maven//:com_google_guava_guava",
123122
"@maven//:org_yaml_snakeyaml",

policy/src/main/java/dev/cel/policy/CelPolicyYamlConfigParser.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,13 @@ private CelPolicyConfig parseYaml(String source, String description)
338338
throws CelPolicyValidationException {
339339
Node node;
340340
try {
341-
node = parseYamlSource(source);
341+
Node yamlNode =
342+
parseYamlSource(source)
343+
.orElseThrow(
344+
() ->
345+
new CelPolicyValidationException(
346+
String.format("YAML document is malformed: %s", source)));
347+
node = yamlNode;
342348
} catch (RuntimeException e) {
343349
throw new CelPolicyValidationException("YAML document is malformed: " + e.getMessage(), e);
344350
}

policy/src/main/java/dev/cel/policy/CelPolicyYamlParser.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,15 @@ private static class ParserImpl implements PolicyParserContext<Node> {
6666

6767
private CelPolicy parseYaml() throws CelPolicyValidationException {
6868
Node node;
69+
String policySourceString = policySource.getContent().toString();
6970
try {
70-
node = YamlHelper.parseYamlSource(policySource.getContent().toString());
71+
Node yamlNode =
72+
YamlHelper.parseYamlSource(policySourceString)
73+
.orElseThrow(
74+
() ->
75+
new CelPolicyValidationException(
76+
String.format("YAML document is malformed: %s", policySourceString)));
77+
node = yamlNode;
7178
} catch (RuntimeException e) {
7279
throw new CelPolicyValidationException("YAML document is malformed: " + e.getMessage(), e);
7380
}

policy/src/main/java/dev/cel/policy/YamlHelper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.google.common.base.Joiner;
2121
import java.io.StringReader;
2222
import java.util.List;
23+
import java.util.Optional;
2324
import org.yaml.snakeyaml.LoaderOptions;
2425
import org.yaml.snakeyaml.Yaml;
2526
import org.yaml.snakeyaml.constructor.SafeConstructor;
@@ -68,10 +69,9 @@ public static boolean assertYamlType(
6869
return false;
6970
}
7071

71-
static Node parseYamlSource(String policyContent) {
72+
static Optional<Node> parseYamlSource(String policyContent) {
7273
Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions()));
73-
74-
return yaml.compose(new StringReader(policyContent));
74+
return Optional.ofNullable(yaml.compose(new StringReader(policyContent)));
7575
}
7676

7777
static boolean assertRequiredFields(

0 commit comments

Comments
 (0)