Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ dependencies {
api 'com.github.docker-java:docker-java-transport-zerodep'

shaded 'com.google.guava:guava:33.3.1-jre'
shaded "org.yaml:snakeyaml:2.5"
shaded "org.snakeyaml:snakeyaml-engine:3.0.1"

shaded 'org.glassfish.main.external:trilead-ssh2-repackaged:4.1.2'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.snakeyaml.engine.v2.api.Load;
import org.snakeyaml.engine.v2.api.LoadSettings;
import org.snakeyaml.engine.v2.constructor.StandardConstructor;
import org.snakeyaml.engine.v2.nodes.Node;
import org.snakeyaml.engine.v2.nodes.Tag;
import org.testcontainers.images.ParsedDockerfile;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.Tag;
import org.yaml.snakeyaml.representer.Representer;
import org.yaml.snakeyaml.resolver.Resolver;

import java.io.File;
import java.io.FileInputStream;
Expand Down Expand Up @@ -42,12 +39,14 @@ class ParsedDockerComposeFile {
private final Map<String, Set<String>> serviceNameToImageNames = new HashMap<>();

ParsedDockerComposeFile(File composeFile) {
// The default is 50 and a big docker-compose.yml file can easily go above that number. 1,000 should give us some room
LoaderOptions options = new LoaderOptions();
options.setMaxAliasesForCollections(1_000);
DumperOptions dumperOptions = new DumperOptions();

SafeConstructor constructor = new SafeConstructor(options) {
LoadSettings loadSettings = LoadSettings
.builder()
// The default is 50 and a big docker-compose.yml file can easily go above that number.
// 1,000 should give us some room
.setMaxAliasesForCollections(1_000)
.build();

StandardConstructor constructor = new StandardConstructor(loadSettings) {
@Override
protected Object constructObject(Node node) {
if (node.getTag().equals(new Tag("!reset"))) {
Expand All @@ -56,9 +55,9 @@ protected Object constructObject(Node node) {
return super.constructObject(node);
}
};
Yaml yaml = new Yaml(constructor, new Representer(dumperOptions), dumperOptions, options, new Resolver());
Load load = new Load(loadSettings, constructor);
try (FileInputStream fileInputStream = FileUtils.openInputStream(composeFile)) {
composeFileContent = yaml.load(fileInputStream);
composeFileContent = (Map<String, Object>) load.loadFromInputStream(fileInputStream);
} catch (Exception e) {
throw new IllegalArgumentException("Unable to parse YAML file from " + composeFile.getAbsolutePath(), e);
}
Expand Down