You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/12/11 09:15:38 UTC
[1/2] brooklyn-server git commit: Use SnakeYAML SafeConstructor by
default
Repository: brooklyn-server
Updated Branches:
refs/heads/master b765795e7 -> e997d9abd
Use SnakeYAML SafeConstructor by default
Overridable by setting a system property.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/3ae4a4d1
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/3ae4a4d1
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/3ae4a4d1
Branch: refs/heads/master
Commit: 3ae4a4d156341a53e54a2fe07192f46b15763d06
Parents: 9f8a3aa
Author: Richard Downer <ri...@apache.org>
Authored: Thu Dec 8 16:43:40 2016 +0000
Committer: Richard Downer <ri...@apache.org>
Committed: Fri Dec 9 11:10:51 2016 +0000
----------------------------------------------------------------------
.../util/internal/BrooklynSystemProperties.java | 2 ++
.../org/apache/brooklyn/util/yaml/Yamls.java | 20 +++++++++++++-----
.../apache/brooklyn/util/yaml/YamlsTest.java | 22 ++++++++++++++++++--
3 files changed, 37 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3ae4a4d1/utils/common/src/main/java/org/apache/brooklyn/util/internal/BrooklynSystemProperties.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/internal/BrooklynSystemProperties.java b/utils/common/src/main/java/org/apache/brooklyn/util/internal/BrooklynSystemProperties.java
index 3d0048b..58c27d9 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/internal/BrooklynSystemProperties.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/internal/BrooklynSystemProperties.java
@@ -37,4 +37,6 @@ public class BrooklynSystemProperties {
public static StringSystemProperty HOST_GEO_LOOKUP_IMPL_LEGACY = new StringSystemProperty("brooklyn.location.geo.HostGeoLookup");
public static StringSystemProperty HOST_GEO_LOOKUP_IMPL = new StringSystemProperty("org.apache.brooklyn.core.location.geo.HostGeoLookup");
+ /** Allows the use of YAML tags to create arbitrary types known to Java. */
+ public static BooleanSystemProperty YAML_TYPE_INSTANTIATION = new BooleanSystemProperty("org.apache.brooklyn.unsafe.YamlTypeInstantiation");
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3ae4a4d1/utils/common/src/main/java/org/apache/brooklyn/util/yaml/Yamls.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/yaml/Yamls.java b/utils/common/src/main/java/org/apache/brooklyn/util/yaml/Yamls.java
index 1697097..8230676 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/yaml/Yamls.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/yaml/Yamls.java
@@ -34,11 +34,13 @@ import org.apache.brooklyn.util.collections.Jsonya;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.exceptions.UserFacingException;
+import org.apache.brooklyn.util.internal.BrooklynSystemProperties;
import org.apache.brooklyn.util.text.Strings;
-import org.apache.brooklyn.util.yaml.Yamls;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.Constructor;
+import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.error.Mark;
import org.yaml.snakeyaml.nodes.MappingNode;
import org.yaml.snakeyaml.nodes.Node;
@@ -54,6 +56,14 @@ public class Yamls {
private static final Logger log = LoggerFactory.getLogger(Yamls.class);
+ private static Yaml newYaml() {
+ return new Yaml(
+ BrooklynSystemProperties.YAML_TYPE_INSTANTIATION.isEnabled()
+ ? new Constructor() // allows instantiation of arbitrary Java types
+ : new SafeConstructor() // allows instantiation of limited set of types only
+ );
+ }
+
/** returns the given (yaml-parsed) object as the given yaml type.
* <p>
* if the object is an iterable or iterator this method will fully expand it as a list.
@@ -93,7 +103,7 @@ public class Yamls {
*/
@Beta
public static Object getAt(String yaml, List<String> path) {
- Iterable<Object> result = new org.yaml.snakeyaml.Yaml().loadAll(yaml);
+ Iterable<Object> result = newYaml().loadAll(yaml);
Object current = result.iterator().next();
return getAtPreParsed(current, path);
}
@@ -152,14 +162,14 @@ public class Yamls {
/** simplifies new Yaml().loadAll, and converts to list to prevent single-use iterable bug in yaml */
@SuppressWarnings("unchecked")
public static Iterable<Object> parseAll(String yaml) {
- Iterable<Object> result = new org.yaml.snakeyaml.Yaml().loadAll(yaml);
+ Iterable<Object> result = newYaml().loadAll(yaml);
return (List<Object>) getAs(result, List.class);
}
/** as {@link #parseAll(String)} */
@SuppressWarnings("unchecked")
public static Iterable<Object> parseAll(Reader yaml) {
- Iterable<Object> result = new org.yaml.snakeyaml.Yaml().loadAll(yaml);
+ Iterable<Object> result = newYaml().loadAll(yaml);
return (List<Object>) getAs(result, List.class);
}
@@ -536,7 +546,7 @@ b: 1
try {
int pathIndex = 0;
result.yaml = yaml;
- result.focus = new Yaml().compose(new StringReader(yaml));
+ result.focus = newYaml().compose(new StringReader(yaml));
findTextOfYamlAtPath(result, pathIndex, path);
return result;
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/3ae4a4d1/utils/common/src/test/java/org/apache/brooklyn/util/yaml/YamlsTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/yaml/YamlsTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/yaml/YamlsTest.java
index bd701d5..50e499e 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/yaml/YamlsTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/yaml/YamlsTest.java
@@ -19,18 +19,20 @@
package org.apache.brooklyn.util.yaml;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
import java.util.Iterator;
import java.util.List;
+import org.apache.brooklyn.test.Asserts;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.exceptions.UserFacingException;
-import org.apache.brooklyn.util.yaml.Yamls;
-import org.apache.brooklyn.util.yaml.YamlsTest;
+import org.apache.brooklyn.util.internal.BrooklynSystemProperties;
import org.apache.brooklyn.util.yaml.Yamls.YamlExtract;
import org.testng.Assert;
import org.testng.TestNG;
import org.testng.annotations.Test;
+import org.yaml.snakeyaml.constructor.ConstructorException;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -183,6 +185,22 @@ public class YamlsTest {
}
}
+ @Test
+ public void testSafeYaml() throws Exception {
+ assertFalse(BrooklynSystemProperties.YAML_TYPE_INSTANTIATION.isEnabled(),
+ "Set property to false (or do not set at all): " + BrooklynSystemProperties.YAML_TYPE_INSTANTIATION.getPropertyName());
+
+ try {
+ Yamls.parseAll("!!java.util.Date\n" +
+ "date: 25\n" +
+ "month: 12\n" +
+ "year: 2016");
+ Asserts.shouldHaveFailedPreviously("Expected exception: " + ConstructorException.class.getCanonicalName());
+ } catch(ConstructorException e) {
+ Asserts.expectedFailureContains(e, "could not determine a constructor");
+ }
+ }
+
// convenience, since running with older TestNG IDE plugin will fail (older snakeyaml dependency);
// if you run as a java app it doesn't bring in the IDE TestNG jar version, and it works
public static void main(String[] args) {
[2/2] brooklyn-server git commit: Closes #483
Posted by sv...@apache.org.
Closes #483
Use SnakeYAML SafeConstructor by default
Overridable by setting a system property.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/e997d9ab
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/e997d9ab
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/e997d9ab
Branch: refs/heads/master
Commit: e997d9abd68c79c93166fca8d84365bd3cd6d7b2
Parents: b765795 3ae4a4d
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Sun Dec 11 11:15:27 2016 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Sun Dec 11 11:15:27 2016 +0200
----------------------------------------------------------------------
.../util/internal/BrooklynSystemProperties.java | 2 ++
.../org/apache/brooklyn/util/yaml/Yamls.java | 20 +++++++++++++-----
.../apache/brooklyn/util/yaml/YamlsTest.java | 22 ++++++++++++++++++--
3 files changed, 37 insertions(+), 7 deletions(-)
----------------------------------------------------------------------