This is an automated email from the ASF dual-hosted git repository. coheigea pushed a commit to branch camel-2.25.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.25.x by this push: new 707b025 Updating to SnakeYaml 1.26 707b025 is described below commit 707b025aab2560aa1ce28bca63359d2f2f6f8a68 Author: Colm O hEigeartaigh <cohei...@apache.org> AuthorDate: Tue Mar 3 07:22:55 2020 +0000 Updating to SnakeYaml 1.26 --- .../component/snakeyaml/SnakeYAMLDataFormat.java | 35 +++++----- .../custom/CustomClassLoaderConstructor.java | 75 ++++------------------ .../component/snakeyaml/SnakeYAMLDoSTest.java | 2 +- parent/pom.xml | 2 +- 4 files changed, 35 insertions(+), 79 deletions(-) diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java index 2218bc8..96b955c 100644 --- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java +++ b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java @@ -34,17 +34,17 @@ import java.util.function.Function; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.component.snakeyaml.custom.CustomClassLoaderConstructor; -import org.apache.camel.component.snakeyaml.custom.CustomConstructor; -import org.apache.camel.component.snakeyaml.custom.CustomSafeConstructor; -import org.apache.camel.component.snakeyaml.custom.Yaml; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.DataFormatName; import org.apache.camel.support.ServiceSupport; import org.apache.camel.util.IOHelper; import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.TypeDescription; +import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.BaseConstructor; import org.yaml.snakeyaml.constructor.Constructor; +import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.nodes.Tag; import org.yaml.snakeyaml.representer.Representer; import org.yaml.snakeyaml.resolver.Resolver; @@ -131,12 +131,16 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor } if (yaml == null) { + LoaderOptions options = new LoaderOptions(); + options.setAllowRecursiveKeys(allowRecursiveKeys); + options.setMaxAliasesForCollections(maxAliasesForCollections); + yaml = new Yaml( this.constructor.apply(context), this.representer.apply(context), this.dumperOptions.apply(context), - this.resolver.apply(context), - maxAliasesForCollections + options, + this.resolver.apply(context) ); yamlCache.set(new WeakReference<>(yaml)); @@ -370,6 +374,10 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor yamlTypeFilters = Collections.singletonList(TypeFilters.allowAll()); } + LoaderOptions options = new LoaderOptions(); + options.setAllowRecursiveKeys(allowRecursiveKeys); + options.setMaxAliasesForCollections(maxAliasesForCollections); + BaseConstructor yamlConstructor; if (yamlTypeFilters != null) { ClassLoader yamlClassLoader = this.classLoader; @@ -378,11 +386,10 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor } yamlConstructor = yamlClassLoader != null - ? typeFilterConstructor(yamlClassLoader, yamlTypeFilters, allowRecursiveKeys) - : typeFilterConstructor(yamlTypeFilters, allowRecursiveKeys); + ? typeFilterConstructor(yamlClassLoader, yamlTypeFilters, options) + : typeFilterConstructor(yamlTypeFilters, options); } else { - yamlConstructor = new CustomSafeConstructor(); - ((CustomSafeConstructor)yamlConstructor).setAllowRecursiveKeys(allowRecursiveKeys); + yamlConstructor = new SafeConstructor(options); } if (typeDescriptions != null && yamlConstructor instanceof Constructor) { @@ -421,8 +428,8 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor // Constructors // *************************** - private static Constructor typeFilterConstructor(final Collection<TypeFilter> typeFilters, boolean allowRecursiveKeys) { - CustomConstructor constructor = new CustomConstructor() { + private static Constructor typeFilterConstructor(final Collection<TypeFilter> typeFilters, LoaderOptions options) { + Constructor constructor = new Constructor(options) { @Override protected Class<?> getClassForName(String name) throws ClassNotFoundException { if (typeFilters.stream().noneMatch(f -> f.test(name))) { @@ -432,13 +439,12 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor return super.getClassForName(name); } }; - constructor.setAllowRecursiveKeys(allowRecursiveKeys); return constructor; } private static Constructor typeFilterConstructor(final ClassLoader classLoader, final Collection<TypeFilter> typeFilters, - boolean allowRecursiveKeys) { - CustomClassLoaderConstructor constructor = new CustomClassLoaderConstructor(classLoader) { + LoaderOptions options) { + CustomClassLoaderConstructor constructor = new CustomClassLoaderConstructor(classLoader, options) { @Override protected Class<?> getClassForName(String name) throws ClassNotFoundException { if (typeFilters.stream().noneMatch(f -> f.test(name))) { @@ -448,7 +454,6 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor return super.getClassForName(name); } }; - constructor.setAllowRecursiveKeys(allowRecursiveKeys); return constructor; } } diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java index b6cb6bf..f9e8497 100644 --- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java +++ b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java @@ -16,75 +16,26 @@ */ package org.apache.camel.component.snakeyaml.custom; -import java.util.List; -import java.util.Map; - -import org.yaml.snakeyaml.constructor.ConstructorException; -import org.yaml.snakeyaml.error.Mark; -import org.yaml.snakeyaml.error.YAMLException; -import org.yaml.snakeyaml.nodes.MappingNode; -import org.yaml.snakeyaml.nodes.Node; -import org.yaml.snakeyaml.nodes.NodeTuple; +import org.yaml.snakeyaml.LoaderOptions; +import org.yaml.snakeyaml.constructor.Constructor; /** - * A CustomClassLoaderConstructor which picks up the options to disallow recursive keys - * - * NOTE - If this PR gets applied then we can remove it: - * https://bitbucket.org/asomov/snakeyaml/pull-requests/55/allow-configuration-for-preventing-billion/diff + * A CustomClassLoaderConstructor which allows to set the LoaderOptions */ -public class CustomClassLoaderConstructor extends org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor { +public class CustomClassLoaderConstructor extends Constructor { - private boolean allowRecursiveKeys; - - public CustomClassLoaderConstructor(ClassLoader cLoader) { - super(cLoader); - } + private ClassLoader loader = this.getClass().getClassLoader(); - public CustomClassLoaderConstructor(Class<? extends Object> theRoot, ClassLoader theLoader) { - super(theRoot, theLoader); - } - - @Override - protected void constructMapping2ndStep(MappingNode node, Map<Object, Object> mapping) { - List<NodeTuple> nodeValue = node.getValue(); - for (NodeTuple tuple : nodeValue) { - Node keyNode = tuple.getKeyNode(); - Node valueNode = tuple.getValueNode(); - Object key = constructObject(keyNode); - if (key != null) { - try { - key.hashCode(); // check circular dependencies - } catch (Exception e) { - throw new CustomConstructorException("while constructing a mapping", - node.getStartMark(), "found unacceptable key " + key, - tuple.getKeyNode().getStartMark(), e); - } - } - Object value = constructObject(valueNode); - if (keyNode.isTwoStepsConstruction()) { - if (allowRecursiveKeys) { - postponeMapFilling(mapping, key, value); - } else { - throw new YAMLException("Recursive key for mapping is detected but it is not configured to be allowed."); - } - } else { - mapping.put(key, value); - } + public CustomClassLoaderConstructor(ClassLoader theLoader, LoaderOptions options) { + super(Object.class, options); + if (theLoader == null) { + throw new NullPointerException("Loader must be provided."); } + this.loader = theLoader; } - public boolean isAllowRecursiveKeys() { - return allowRecursiveKeys; - } - - public void setAllowRecursiveKeys(boolean allowRecursiveKeys) { - this.allowRecursiveKeys = allowRecursiveKeys; - } - - private static class CustomConstructorException extends ConstructorException { - public CustomConstructorException(String context, Mark contextMark, String problem, - Mark problemMark, Throwable cause) { - super(context, contextMark, problem, problemMark, cause); - } + @Override + protected Class<?> getClassForName(String name) throws ClassNotFoundException { + return Class.forName(name, true, loader); } } diff --git a/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java b/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java index b338419..5acd223 100644 --- a/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java +++ b/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java @@ -24,9 +24,9 @@ import org.apache.camel.CamelExecutionException; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.component.snakeyaml.custom.Yaml; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Test; +import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.SafeConstructor; public class SnakeYAMLDoSTest extends CamelTestSupport { diff --git a/parent/pom.xml b/parent/pom.xml index a237eb9..ce4dc80 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -627,7 +627,7 @@ <slf4j-api-version>1.7.26</slf4j-api-version> <slf4j-version>1.7.26</slf4j-version> <smack-version>4.3.1</smack-version> - <snakeyaml-version>1.25</snakeyaml-version> + <snakeyaml-version>1.26</snakeyaml-version> <snappy-version>1.1.4</snappy-version> <snmp4j-version>2.6.3_1</snmp4j-version> <solr-bundle-version>7.5.0_1</solr-bundle-version>