diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2022-03-25 15:56:33 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2022-03-25 15:56:33 +0100 |
commit | 06f7bfc71f76dffdea4fb2ef49b50541da32f487 (patch) | |
tree | 3b08f0a7442ba3dd12bdac5012eb9357109ba8f1 /config-lib | |
parent | f55219e07ca351cdcdf25a199cf2fce0449fd7c8 (diff) |
Improve more error messages
Diffstat (limited to 'config-lib')
5 files changed, 28 insertions, 11 deletions
diff --git a/config-lib/src/main/java/com/yahoo/config/FileNode.java b/config-lib/src/main/java/com/yahoo/config/FileNode.java index a7c1ebb1488..3bcccb6d6b1 100644 --- a/config-lib/src/main/java/com/yahoo/config/FileNode.java +++ b/config-lib/src/main/java/com/yahoo/config/FileNode.java @@ -1,6 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config; +import java.nio.file.Path; + /** * Represents a 'file' in a {@link ConfigInstance}, usually a filename. * @@ -13,7 +15,13 @@ public class FileNode extends LeafNode<FileReference> { public FileNode(String stringVal) { super(true); - this.value = new FileReference(ReferenceNode.stripQuotes(stringVal)); + Path path = Path.of(ReferenceNode.stripQuotes(stringVal)).normalize(); + if (path.isAbsolute()) + throw new IllegalArgumentException("path must be relative"); + if (path.startsWith("..")) + throw new IllegalArgumentException("'..' not allowed in path"); + + this.value = new FileReference(path.toString()); } public FileReference value() { diff --git a/config-lib/src/main/java/com/yahoo/config/Node.java b/config-lib/src/main/java/com/yahoo/config/Node.java index a07409b19e7..4f0c1c24192 100644 --- a/config-lib/src/main/java/com/yahoo/config/Node.java +++ b/config-lib/src/main/java/com/yahoo/config/Node.java @@ -14,7 +14,7 @@ public abstract class Node { * * @param configId the configId of the ConfigInstance that owns (or is) this node */ - public void postInitialize(String configId) { return; } + public void postInitialize(String configId) { } /** * This method is meant for internal use in the configuration system. diff --git a/config-lib/src/main/java/com/yahoo/config/NodeVector.java b/config-lib/src/main/java/com/yahoo/config/NodeVector.java index 3d07de944fd..af54c4d90ca 100644 --- a/config-lib/src/main/java/com/yahoo/config/NodeVector.java +++ b/config-lib/src/main/java/com/yahoo/config/NodeVector.java @@ -1,7 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; /** @@ -24,7 +28,6 @@ public abstract class NodeVector<NODE> implements java.util.List<NODE> { return size(); } - @SuppressWarnings("serial") public static class ReadOnlyException extends RuntimeException { } @@ -80,7 +83,7 @@ public abstract class NodeVector<NODE> implements java.util.List<NODE> { @Override public boolean equals(Object o) { - return o instanceof NodeVector && vector.equals(((NodeVector) o).vector); + return o instanceof NodeVector && vector.equals(((NodeVector<?>) o).vector); } @Override @@ -88,7 +91,6 @@ public abstract class NodeVector<NODE> implements java.util.List<NODE> { return vector.hashCode(); } - @SuppressWarnings("unchecked") public NODE get(int index) { return vector.get(index); } @@ -132,4 +134,5 @@ public abstract class NodeVector<NODE> implements java.util.List<NODE> { public <T> T[] toArray(T[] a) { return vector.toArray(a); } + } diff --git a/config-lib/src/main/java/com/yahoo/config/PathNode.java b/config-lib/src/main/java/com/yahoo/config/PathNode.java index 1c4f724a7ed..2c43f89af3f 100644 --- a/config-lib/src/main/java/com/yahoo/config/PathNode.java +++ b/config-lib/src/main/java/com/yahoo/config/PathNode.java @@ -23,7 +23,13 @@ public class PathNode extends LeafNode<Path> { public PathNode(FileReference fileReference) { super(true); - this.value = new File(fileReference.value()).toPath(); + Path value = Path.of(fileReference.value()).normalize(); + if (value.isAbsolute()) + throw new IllegalArgumentException("path must be relative"); + if (value.startsWith("..")) + throw new IllegalArgumentException("'..' not allowed in path"); + + this.value = value; this.fileReference = fileReference; } diff --git a/config-lib/src/test/java/com/yahoo/config/ConfigInstanceBuilderTest.java b/config-lib/src/test/java/com/yahoo/config/ConfigInstanceBuilderTest.java index 613cfe1cced..4e3b8f3bf22 100644 --- a/config-lib/src/test/java/com/yahoo/config/ConfigInstanceBuilderTest.java +++ b/config-lib/src/test/java/com/yahoo/config/ConfigInstanceBuilderTest.java @@ -182,8 +182,8 @@ public class ConfigInstanceBuilderTest intMap("one", 1). intMap("two", 2). stringMap("one", "first"). - filemap("f1", "/var"). - filemap("f2", "/store"). + filemap("f1", "var"). + filemap("f2", "store"). urlMap("u1", new UrlReference("http://docs.vespa.ai/1")). urlMap("u2", new UrlReference("http://docs.vespa.ai/2")). @@ -278,8 +278,8 @@ public class ConfigInstanceBuilderTest assertEquals(1, config.intMap("one")); assertEquals(2, config.intMap("two")); assertEquals("first", config.stringMap("one")); - assertEquals("/var", config.filemap("f1").value()); - assertEquals("/store", config.filemap("f2").value()); + assertEquals("var", config.filemap("f1").value()); + assertEquals("store", config.filemap("f2").value()); assertEquals("basicFoo", config.basicStruct().foo()); assertEquals(3, config.basicStruct().bar()); // new List api assertEquals(2, config.basicStruct().intArr().size()); |