diff --git a/grails-bootstrap/build.gradle b/grails-bootstrap/build.gradle index 6a91e1c2d52..b9f57f103b4 100644 --- a/grails-bootstrap/build.gradle +++ b/grails-bootstrap/build.gradle @@ -3,7 +3,7 @@ import org.apache.tools.ant.filters.ReplaceTokens dependencies { compile ( "org.codehaus.groovy:groovy-xml:$groovyVersion" ) compile ( "org.codehaus.groovy:groovy-templates:$groovyVersion" ) - compile "org.yaml:snakeyaml:1.33" + compile "org.yaml:snakeyaml:2.2" compileOnly("io.methvin:directory-watcher:0.16.1") compileOnly("org.fusesource.jansi:jansi:$jansiVersion") diff --git a/grails-bootstrap/src/main/groovy/grails/util/Metadata.groovy b/grails-bootstrap/src/main/groovy/grails/util/Metadata.groovy index 0228bee588c..f4b08f49dbf 100644 --- a/grails-bootstrap/src/main/groovy/grails/util/Metadata.groovy +++ b/grails-bootstrap/src/main/groovy/grails/util/Metadata.groovy @@ -22,6 +22,7 @@ import org.grails.config.NavigableMap import org.grails.io.support.FileSystemResource import org.grails.io.support.Resource import org.grails.io.support.UrlResource +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -168,7 +169,7 @@ class Metadata extends NavigableMap implements ConfigMap { } private Object loadYml(InputStream input) { - Yaml yaml = new Yaml(new SafeConstructor()) + Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions())) def loadedYaml = yaml.loadAll(input) List result = [] for(Object yamlObject : loadedYaml) { diff --git a/grails-bootstrap/src/main/groovy/org/grails/config/CodeGenConfig.groovy b/grails-bootstrap/src/main/groovy/org/grails/config/CodeGenConfig.groovy index 11e6a06d974..b7eb5aa5514 100644 --- a/grails-bootstrap/src/main/groovy/org/grails/config/CodeGenConfig.groovy +++ b/grails-bootstrap/src/main/groovy/org/grails/config/CodeGenConfig.groovy @@ -22,6 +22,7 @@ import groovy.transform.CompileDynamic import groovy.transform.CompileStatic import org.codehaus.groovy.runtime.DefaultGroovyMethods import org.codehaus.groovy.runtime.typehandling.GroovyCastException +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -153,7 +154,7 @@ class CodeGenConfig implements Cloneable, ConfigMap { @CompileDynamic // fails with CompileStatic! void loadYml(InputStream input) { - Yaml yaml = new Yaml(new SafeConstructor()) + Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions())) for(Object yamlObject : yaml.loadAll(input)) { if(yamlObject instanceof Map) { // problem here with CompileStatic mergeMap((Map)yamlObject) diff --git a/grails-docs/src/main/groovy/grails/doc/DocPublisher.groovy b/grails-docs/src/main/groovy/grails/doc/DocPublisher.groovy index 1a4fa3b6b52..e8faf7fe023 100644 --- a/grails-docs/src/main/groovy/grails/doc/DocPublisher.groovy +++ b/grails-docs/src/main/groovy/grails/doc/DocPublisher.groovy @@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory import org.radeox.api.engine.WikiRenderEngine import org.radeox.engine.context.BaseInitialRenderContext import org.radeox.engine.context.BaseRenderContext +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -265,7 +266,7 @@ class DocPublisher { def legacyLinks = [:] if (legacyLinksFile.exists()) { legacyLinksFile.withInputStream { input -> - legacyLinks = new Yaml(new SafeConstructor()).load(input) + legacyLinks = new Yaml(new SafeConstructor(new LoaderOptions())).load(input) } } @@ -537,7 +538,7 @@ class DocPublisher { } else if(propertiesFile.name.endsWith('.yml')) { propertiesFile.withInputStream { input -> - def ymls = new Yaml(new SafeConstructor()).loadAll(input) + def ymls = new Yaml(new SafeConstructor(new LoaderOptions())).loadAll(input) for(yml in ymls) { if(yml instanceof Map) { def config = yml.grails?.doc diff --git a/grails-docs/src/main/groovy/grails/doc/internal/YamlTocStrategy.groovy b/grails-docs/src/main/groovy/grails/doc/internal/YamlTocStrategy.groovy index fec54559155..07689b58c4c 100644 --- a/grails-docs/src/main/groovy/grails/doc/internal/YamlTocStrategy.groovy +++ b/grails-docs/src/main/groovy/grails/doc/internal/YamlTocStrategy.groovy @@ -1,5 +1,6 @@ package grails.doc.internal +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -7,7 +8,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor * Class representing a Grails user guide table of contents defined in YAML. */ class YamlTocStrategy { - private final parser = new Yaml(new SafeConstructor()) + private final parser = new Yaml(new SafeConstructor(new LoaderOptions())) private resourceChecker private String ext = ".gdoc" diff --git a/grails-shell/src/main/groovy/org/grails/cli/gradle/cache/MapReadingCachedGradleOperation.groovy b/grails-shell/src/main/groovy/org/grails/cli/gradle/cache/MapReadingCachedGradleOperation.groovy index b1460c97847..fa0adaef5cc 100644 --- a/grails-shell/src/main/groovy/org/grails/cli/gradle/cache/MapReadingCachedGradleOperation.groovy +++ b/grails-shell/src/main/groovy/org/grails/cli/gradle/cache/MapReadingCachedGradleOperation.groovy @@ -20,6 +20,7 @@ import groovy.transform.CompileStatic import groovy.transform.InheritConstructors import org.gradle.tooling.ProjectConnection 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.representer.Representer @@ -37,7 +38,7 @@ abstract class MapReadingCachedGradleOperation extends CachedGradleOperation @Override Map readFromCached(File f) { def map = (Map) f.withReader { BufferedReader r -> - new Yaml(new SafeConstructor()).load(r) + new Yaml(new SafeConstructor(new LoaderOptions())).load(r) } Map newMap = [:] @@ -61,7 +62,7 @@ abstract class MapReadingCachedGradleOperation extends CachedGradleOperation return [(key):val.toString()] } } - new Yaml(new SafeConstructor(), new Representer(), options).dump(toWrite, writer) + new Yaml(new SafeConstructor(new LoaderOptions()), new Representer(options), options).dump(toWrite, writer) } } diff --git a/grails-shell/src/main/groovy/org/grails/cli/profile/AbstractProfile.groovy b/grails-shell/src/main/groovy/org/grails/cli/profile/AbstractProfile.groovy index b4edb3a5d1b..503106e9dc7 100644 --- a/grails-shell/src/main/groovy/org/grails/cli/profile/AbstractProfile.groovy +++ b/grails-shell/src/main/groovy/org/grails/cli/profile/AbstractProfile.groovy @@ -33,6 +33,7 @@ import org.grails.cli.profile.commands.DefaultMultiStepCommand import org.grails.cli.profile.commands.script.GroovyScriptCommand import org.grails.config.NavigableMap import org.grails.io.support.Resource +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -108,7 +109,7 @@ abstract class AbstractProfile implements Profile { protected void initialize() { def profileYml = profileDir.createRelative("profile.yml") - Map profileConfig = new Yaml(new SafeConstructor()).> load(profileYml.getInputStream()) + Map profileConfig = new Yaml(new SafeConstructor(new LoaderOptions())).> load(profileYml.getInputStream()) name = profileConfig.get("name")?.toString() description = profileConfig.get("description")?.toString() ?: '' @@ -138,7 +139,7 @@ abstract class AbstractProfile implements Profile { else if(fileName.endsWith('.yml')) { def yamlCommand = profileDir.createRelative("commands/$fileName") if(yamlCommand.exists()) { - Map data = new Yaml(new SafeConstructor()).load(yamlCommand.getInputStream()) + Map data = new Yaml(new SafeConstructor(new LoaderOptions())).load(yamlCommand.getInputStream()) Command cmd = new DefaultMultiStepCommand(clsName.toString(), this, data) Object minArguments = data?.minArguments cmd.minArguments = minArguments instanceof Integer ? (Integer)minArguments : 1 diff --git a/grails-shell/src/main/groovy/org/grails/cli/profile/DefaultFeature.groovy b/grails-shell/src/main/groovy/org/grails/cli/profile/DefaultFeature.groovy index c44e1ffa920..bc1b99655f5 100644 --- a/grails-shell/src/main/groovy/org/grails/cli/profile/DefaultFeature.groovy +++ b/grails-shell/src/main/groovy/org/grails/cli/profile/DefaultFeature.groovy @@ -23,6 +23,7 @@ import org.eclipse.aether.artifact.DefaultArtifact import org.eclipse.aether.graph.Dependency import org.grails.config.NavigableMap import org.grails.io.support.Resource +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -49,7 +50,7 @@ class DefaultFeature implements Feature { this.name = name this.location = location def featureYml = location.createRelative("feature.yml") - Map featureConfig = new Yaml(new SafeConstructor()).>load(featureYml.getInputStream()) + Map featureConfig = new Yaml(new SafeConstructor(new LoaderOptions())).>load(featureYml.getInputStream()) configuration.merge(featureConfig) def dependencyMap = configuration.get("dependencies") diff --git a/grails-shell/src/main/groovy/org/grails/cli/profile/commands/factory/YamlCommandFactory.groovy b/grails-shell/src/main/groovy/org/grails/cli/profile/commands/factory/YamlCommandFactory.groovy index 15c37483c2c..02a71a73e20 100644 --- a/grails-shell/src/main/groovy/org/grails/cli/profile/commands/factory/YamlCommandFactory.groovy +++ b/grails-shell/src/main/groovy/org/grails/cli/profile/commands/factory/YamlCommandFactory.groovy @@ -22,6 +22,7 @@ import org.grails.cli.profile.Command import org.grails.cli.profile.Profile import org.grails.cli.profile.commands.DefaultMultiStepCommand import org.grails.io.support.Resource +import org.yaml.snakeyaml.LoaderOptions import org.yaml.snakeyaml.Yaml import org.yaml.snakeyaml.constructor.SafeConstructor @@ -36,7 +37,7 @@ import java.util.regex.Pattern */ @CompileStatic class YamlCommandFactory extends ResourceResolvingCommandFactory { - protected Yaml yamlParser=new Yaml(new SafeConstructor()) + protected Yaml yamlParser=new Yaml(new SafeConstructor(new LoaderOptions())) // LAX parser for JSON: http://mrhaki.blogspot.ie/2014/08/groovy-goodness-relax-groovy-will-parse.html protected JsonSlurper jsonSlurper = new JsonSlurper().setType(JsonParserType.LAX)