diff options
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 |