From 52c1fcb28c8e334da048dd4ed2326dcbbbe0f576 Mon Sep 17 00:00:00 2001 From: Ben Fortuna Date: Thu, 19 Sep 2019 14:38:06 +1000 Subject: [PATCH] Return undefined priority for invalid value when relaxed parsing is enabled --- .../fortuna/ical4j/model/property/Priority.java | 11 ++++++++++- .../ical4j/model/property/PrioritySpec.groovy | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/fortuna/ical4j/model/property/Priority.java b/src/main/java/net/fortuna/ical4j/model/property/Priority.java index 536dff46c..7d5f7b856 100644 --- a/src/main/java/net/fortuna/ical4j/model/property/Priority.java +++ b/src/main/java/net/fortuna/ical4j/model/property/Priority.java @@ -35,6 +35,7 @@ import net.fortuna.ical4j.model.ParameterList; import net.fortuna.ical4j.model.Property; import net.fortuna.ical4j.model.PropertyFactory; +import net.fortuna.ical4j.util.CompatibilityHints; import net.fortuna.ical4j.validate.ValidationException; import java.io.IOException; @@ -187,7 +188,15 @@ public Priority() { */ public Priority(final ParameterList aList, final String aValue) { super(PRIORITY, aList, new Factory()); - level = Integer.parseInt(aValue); + try { + level = Integer.parseInt(aValue); + } catch (NumberFormatException e) { + if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) { + level = UNDEFINED.level; + } else { + throw e; + } + } } /** diff --git a/src/test/groovy/net/fortuna/ical4j/model/property/PrioritySpec.groovy b/src/test/groovy/net/fortuna/ical4j/model/property/PrioritySpec.groovy index 16ba6a063..f0b04a2dd 100644 --- a/src/test/groovy/net/fortuna/ical4j/model/property/PrioritySpec.groovy +++ b/src/test/groovy/net/fortuna/ical4j/model/property/PrioritySpec.groovy @@ -1,6 +1,7 @@ package net.fortuna.ical4j.model.property import net.fortuna.ical4j.model.ParameterList +import net.fortuna.ical4j.util.CompatibilityHints import spock.lang.Specification class PrioritySpec extends Specification { @@ -20,4 +21,18 @@ class PrioritySpec extends Specification { '5' | Priority.MEDIUM '1' | Priority.HIGH } + + def 'test relaxed parsing with invalid values'() { + when: 'relaxed parsing is enabled' + CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING, true) + + and: 'factory is invoked with invalid value' + def priority = factory.createProperty(new ParameterList(), value) + + then: 'the returned priority is UNDEFINED' + priority == Priority.UNDEFINED + + where: + value << ['', 'low', 'blah'] + } }