aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/yaml/snakeyaml/constructor/SafeConstructor.java7
-rw-r--r--src/main/java/org/yaml/snakeyaml/resolver/Resolver.java14
-rw-r--r--src/main/java/org/yaml/snakeyaml/resolver/ResolverTuple.java54
-rw-r--r--src/test/java/org/yaml/snakeyaml/issues/issue431/FlexSimleKeyTest.java2
-rw-r--r--src/test/java/org/yaml/snakeyaml/issues/issue527/Fuzzy47047Test.java3
-rw-r--r--src/test/java/org/yaml/snakeyaml/issues/issue529/Fuzzy47028Test.java18
-rw-r--r--src/test/java/org/yaml/snakeyaml/resolver/ResolverTupleTest.java2
-rw-r--r--src/test/resources/fuzzer/YamlFuzzer-54633074121768961
8 files changed, 58 insertions, 43 deletions
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/SafeConstructor.java b/src/main/java/org/yaml/snakeyaml/constructor/SafeConstructor.java
index dc92b61d..f38c4e9a 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/SafeConstructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/SafeConstructor.java
@@ -250,7 +250,12 @@ public class SafeConstructor extends BaseConstructor {
public class ConstructYamlInt extends AbstractConstruct {
@Override
public Object construct(Node node) {
- String value = constructScalar((ScalarNode) node).toString().replaceAll("_", "");
+ String value = constructScalar((ScalarNode) node).replaceAll("_", "");
+ if (value.isEmpty()) {
+ throw new ConstructorException("while constructing an int",
+ node.getStartMark(), "found empty value",
+ node.getStartMark());
+ }
int sign = +1;
char first = value.charAt(0);
if (first == '-') {
diff --git a/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java b/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java
index 0ff170d5..9c0d32fb 100644
--- a/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java
+++ b/src/main/java/org/yaml/snakeyaml/resolver/Resolver.java
@@ -69,16 +69,14 @@ public class Resolver {
* matches INT (see issue 130)
* http://code.google.com/p/snakeyaml/issues/detail?id=130
*/
- addImplicitResolver(Tag.INT, INT, "-+0123456789", 100);
- addImplicitResolver(Tag.FLOAT, FLOAT, "-+0123456789.", 100);
- addImplicitResolver(Tag.MERGE, MERGE, "<", 100);
+ addImplicitResolver(Tag.INT, INT, "-+0123456789");
+ addImplicitResolver(Tag.FLOAT, FLOAT, "-+0123456789.");
+ addImplicitResolver(Tag.MERGE, MERGE, "<", 10);
addImplicitResolver(Tag.NULL, NULL, "~nN\0", 10);
addImplicitResolver(Tag.NULL, EMPTY, null, 10);
addImplicitResolver(Tag.TIMESTAMP, TIMESTAMP, "0123456789", 50);
- // The following implicit resolver is only for documentation
- // purposes.
- // It cannot work
- // because plain scalars cannot start with '!', '&', or '*'.
+ // The following implicit resolver is only for documentation purposes.
+ // It cannot work because plain scalars cannot start with '!', '&', or '*'.
addImplicitResolver(Tag.YAML, YAML, "!&*", 10);
}
@@ -127,7 +125,7 @@ public class Resolver {
for (ResolverTuple v : resolvers) {
Tag tag = v.getTag();
Pattern regexp = v.getRegexp();
- if (value.length() < v.getLimit() && regexp.matcher(value).matches()) {
+ if (value.length() <= v.getLimit() && regexp.matcher(value).matches()) {
return tag;
}
}
diff --git a/src/main/java/org/yaml/snakeyaml/resolver/ResolverTuple.java b/src/main/java/org/yaml/snakeyaml/resolver/ResolverTuple.java
index ebdce019..d86a4bf8 100644
--- a/src/main/java/org/yaml/snakeyaml/resolver/ResolverTuple.java
+++ b/src/main/java/org/yaml/snakeyaml/resolver/ResolverTuple.java
@@ -16,34 +16,34 @@
package org.yaml.snakeyaml.resolver;
import java.util.regex.Pattern;
-
import org.yaml.snakeyaml.nodes.Tag;
final class ResolverTuple {
- private final Tag tag;
- private final Pattern regexp;
- private final int limit;
-
- public ResolverTuple(Tag tag, Pattern regexp, int limit) {
- this.tag = tag;
- this.regexp = regexp;
- this.limit = limit;
- }
-
- public Tag getTag() {
- return tag;
- }
-
- public Pattern getRegexp() {
- return regexp;
- }
-
- public int getLimit() {
- return limit;
- }
-
- @Override
- public String toString() {
- return "Tuple tag=" + tag + " regexp=" + regexp;
- }
+
+ private final Tag tag;
+ private final Pattern regexp;
+ private final int limit;
+
+ public ResolverTuple(Tag tag, Pattern regexp, int limit) {
+ this.tag = tag;
+ this.regexp = regexp;
+ this.limit = limit;
+ }
+
+ public Tag getTag() {
+ return tag;
+ }
+
+ public Pattern getRegexp() {
+ return regexp;
+ }
+
+ public int getLimit() {
+ return limit;
+ }
+
+ @Override
+ public String toString() {
+ return "Tuple tag=" + tag + " regexp=" + regexp + " limit=" + limit;
+ }
} \ No newline at end of file
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue431/FlexSimleKeyTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue431/FlexSimleKeyTest.java
index 5f95f659..4103498e 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue431/FlexSimleKeyTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue431/FlexSimleKeyTest.java
@@ -26,7 +26,7 @@ import junit.framework.TestCase;
public class FlexSimleKeyTest extends TestCase {
- private int len = 90;
+ private int len = 130;
public void testLongKey() {
Yaml dumper = new Yaml(createOptions(len));
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue527/Fuzzy47047Test.java b/src/test/java/org/yaml/snakeyaml/issues/issue527/Fuzzy47047Test.java
index db96d9b8..162e1272 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue527/Fuzzy47047Test.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue527/Fuzzy47047Test.java
@@ -32,7 +32,8 @@ public class Fuzzy47047Test {
try {
LoaderOptions options = new LoaderOptions();
options.setNestingDepthLimit(30);
- Yaml yaml = new Yaml(options); String strYaml = Util.getLocalResource("fuzzer/YamlFuzzer-5868638424399872");
+ Yaml yaml = new Yaml(options);
+ String strYaml = Util.getLocalResource("fuzzer/YamlFuzzer-5868638424399872");
yaml.load(strYaml);
fail("Should report invalid YAML");
} catch (YAMLException e) {
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue529/Fuzzy47028Test.java b/src/test/java/org/yaml/snakeyaml/issues/issue529/Fuzzy47028Test.java
index a20ee25e..dd1c16a4 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue529/Fuzzy47028Test.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue529/Fuzzy47028Test.java
@@ -28,16 +28,28 @@ import org.yaml.snakeyaml.error.YAMLException;
public class Fuzzy47028Test {
@Test
- public void parseKeyIndicators_47028() {
+ public void parseEmptyFloat_47028() {
try {
LoaderOptions options = new LoaderOptions();
Yaml yaml = new Yaml(options);
- String strYaml = Util.getLocalResource("fuzzer/YamlFuzzer-5463307412176896");
- yaml.load(strYaml);
+ yaml.load("- !!float");
fail("Should report invalid YAML");
} catch (YAMLException e) {
assertTrue(e.getMessage().contains("while constructing a float"));
assertTrue(e.getMessage().contains("found empty value"));
}
}
+
+ @Test
+ public void parseEmptyInt_47028() {
+ try {
+ LoaderOptions options = new LoaderOptions();
+ Yaml yaml = new Yaml(options);
+ yaml.load("- !!int");
+ fail("Should report invalid YAML");
+ } catch (YAMLException e) {
+ assertTrue(e.getMessage().contains("while constructing an int"));
+ assertTrue(e.getMessage().contains("found empty value"));
+ }
+ }
}
diff --git a/src/test/java/org/yaml/snakeyaml/resolver/ResolverTupleTest.java b/src/test/java/org/yaml/snakeyaml/resolver/ResolverTupleTest.java
index b27c636c..1d5f1b78 100644
--- a/src/test/java/org/yaml/snakeyaml/resolver/ResolverTupleTest.java
+++ b/src/test/java/org/yaml/snakeyaml/resolver/ResolverTupleTest.java
@@ -25,6 +25,6 @@ public class ResolverTupleTest extends TestCase {
public void testToString() {
ResolverTuple tuple = new ResolverTuple(new Tag("dice"), Pattern.compile("\\d+"), 5);
- assertEquals("Tuple tag=dice regexp=\\d+", tuple.toString());
+ assertEquals("Tuple tag=dice regexp=\\d+ limit=5", tuple.toString());
}
}
diff --git a/src/test/resources/fuzzer/YamlFuzzer-5463307412176896 b/src/test/resources/fuzzer/YamlFuzzer-5463307412176896
deleted file mode 100644
index f0d6b301..00000000
--- a/src/test/resources/fuzzer/YamlFuzzer-5463307412176896
+++ /dev/null
@@ -1 +0,0 @@
-- !!float \ No newline at end of file