Skip to content
This repository was archived by the owner on Jun 9, 2025. It is now read-only.

Commit 32faf27

Browse files
committed
Restrict the regex to properties that can have DURATION as a value
1 parent f5e56f6 commit 32faf27

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

lib/src/main/kotlin/at/bitfire/ical4android/validation/FixInvalidDayOffsetPreprocessor.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ object FixInvalidDayOffsetPreprocessor : StreamPreprocessor() {
1515
// TRIGGER:-P2DT
1616
// TRIGGER:-PT2D
1717
// REFRESH-INTERVAL;VALUE=DURATION:PT1D
18-
"(?:^|=)(DURATION|TRIGGER):-?P((T-?\\d+D)|(-?\\d+DT))$",
18+
"(?:^|(DURATION|REFRESH-INTERVAL|RELATED-TO|TRIGGER);VALUE=)" +
19+
"(DURATION|TRIGGER):-?P((T-?\\d+D)|(-?\\d+DT))$",
1920
setOf(RegexOption.MULTILINE, RegexOption.IGNORE_CASE)
2021
)
2122

lib/src/test/kotlin/at/bitfire/ical4android/validation/FixInvalidDayOffsetPreprocessorTest.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.junit.Assert.assertFalse
99
import org.junit.Assert.assertTrue
1010
import org.junit.Test
1111
import java.time.Duration
12+
import java.time.format.DateTimeParseException
1213

1314
class FixInvalidDayOffsetPreprocessorTest {
1415

@@ -36,11 +37,19 @@ class FixInvalidDayOffsetPreprocessorTest {
3637
}
3738

3839
@Test
39-
fun test_FixString_CompleteICalProperty() {
40-
fixAndAssert(
41-
"REFRESH-INTERVAL;VALUE=DURATION:P1D",
42-
"REFRESH-INTERVAL;VALUE=DURATION:PT1D"
43-
)
40+
fun test_FixString_SucceedsAsValueOnCorrectProperties() {
41+
// By RFC 5545 the only properties allowed to hold DURATION as a VALUE are:
42+
// DURATION, REFRESH, RELATED, TRIGGER
43+
fixAndAssert("DURATION;VALUE=DURATION:P1D", "DURATION;VALUE=DURATION:PT1D")
44+
fixAndAssert("REFRESH-INTERVAL;VALUE=DURATION:P1D", "REFRESH-INTERVAL;VALUE=DURATION:PT1D")
45+
fixAndAssert("RELATED-TO;VALUE=DURATION:P1D", "RELATED-TO;VALUE=DURATION:PT1D")
46+
fixAndAssert("TRIGGER;VALUE=DURATION:P1D", "TRIGGER;VALUE=DURATION:PT1D")
47+
}
48+
49+
@Test(expected = DateTimeParseException::class)
50+
fun test_FixString_FailsAsValueOnWrongProperty() {
51+
// The update from RFC 2445 to RFC 5545 disallows using DURATION as a VALUE in FREEBUSY
52+
fixAndAssert("FREEBUSY;VALUE=DURATION:P1D", "FREEBUSY;VALUE=DURATION:PT1D")
4453
}
4554

4655
@Test

0 commit comments

Comments
 (0)