summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2014-08-18 11:29:46 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2014-08-18 11:37:41 +0200
commitbcc820ea743e0448b26a8fee5e8e0a9f85bc3c70 (patch)
tree06ba51636861f41832e5a1f4485d8105a6a67a7f
parente57b9654ff90230bc8b0631753b3dc0c829a9747 (diff)
downloadcalcurse-bcc820ea743e0448b26a8fee5e8e0a9f85bc3c70.zip
Handle CRLF line endings in iCal files
RFC 2445 mentions that CRLF line endings may be used in iCal files. Handle them properly when importing. Reported-by: HÃ¥kan Jerning <jerning@home.se> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r--src/ical.c16
-rw-r--r--test/Makefile.am2
-rw-r--r--test/data/ical-004.ical12
-rwxr-xr-xtest/ical-004.sh28
4 files changed, 54 insertions, 4 deletions
diff --git a/src/ical.c b/src/ical.c
index 38e1b33..264348b 100644
--- a/src/ical.c
+++ b/src/ical.c
@@ -399,8 +399,12 @@ ical_readline_init(FILE * fdi, char *buf, char *lstore, unsigned *ln)
*buf = *lstore = '\0';
if (fgets(lstore, BUFSIZ, fdi)) {
- if ((eol = strchr(lstore, '\n')) != NULL)
- *eol = '\0';
+ if ((eol = strchr(lstore, '\n')) != NULL) {
+ if (*(eol - 1) == '\r')
+ *(eol - 1) = '\0';
+ else
+ *eol = '\0';
+ }
(*ln)++;
}
}
@@ -413,8 +417,12 @@ static int ical_readline(FILE * fdi, char *buf, char *lstore, unsigned *ln)
(*ln)++;
while (fgets(lstore, BUFSIZ, fdi) != NULL) {
- if ((eol = strchr(lstore, '\n')) != NULL)
- *eol = '\0';
+ if ((eol = strchr(lstore, '\n')) != NULL) {
+ if (*(eol - 1) == '\r')
+ *(eol - 1) = '\0';
+ else
+ *eol = '\0';
+ }
if (*lstore != SPACE && *lstore != TAB)
break;
strncat(buf, lstore + 1, BUFSIZ - strlen(buf) - 1);
diff --git a/test/Makefile.am b/test/Makefile.am
index d036a1d..18513d3 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -45,6 +45,7 @@ TESTS = \
ical-001.sh \
ical-002.sh \
ical-003.sh \
+ ical-004.sh \
next-001.sh \
search-001.sh \
bug-002.sh \
@@ -105,4 +106,5 @@ EXTRA_DIST = \
data/ical-001.ical \
data/ical-002.ical \
data/ical-003.ical \
+ data/ical-004.ical \
data/todo
diff --git a/test/data/ical-004.ical b/test/data/ical-004.ical
new file mode 100644
index 0000000..0ee3bcb
--- /dev/null
+++ b/test/data/ical-004.ical
@@ -0,0 +1,12 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+BEGIN:VEVENT
+DTSTART:19800101T000100
+DURATION:P1DT9H17M0S
+SUMMARY:Calibrator's
+END:VEVENT
+BEGIN:VTODO
+PRIORITY:1
+SUMMARY:Nary parabled Louvre's fleetest mered
+END:VTODO
+END:VCALENDAR
diff --git a/test/ical-004.sh b/test/ical-004.sh
new file mode 100755
index 0000000..a804a1e
--- /dev/null
+++ b/test/ical-004.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+. "${TEST_INIT:-./test-init.sh}"
+
+if [ "$1" = 'actual' ]; then
+ mkdir .calcurse || exit 1
+ cp "$DATA_DIR/conf" .calcurse || exit 1
+ "$CALCURSE" -D "$PWD/.calcurse" -i "$DATA_DIR/ical-004.ical"
+ "$CALCURSE" -D "$PWD/.calcurse" -s01/01/1980 -r2
+ "$CALCURSE" -D "$PWD/.calcurse" -t
+ rm -rf .calcurse || exit 1
+elif [ "$1" = 'expected' ]; then
+ cat <<EOD
+Import process report: 0017 lines read
+1 app / 0 events / 1 todo / 0 skipped
+01/01/80:
+ - 00:01 -> ..:..
+ Calibrator's
+
+01/02/80:
+ - ..:.. -> 09:18
+ Calibrator's
+to do:
+9. Nary parabled Louvre's fleetest mered
+EOD
+else
+ ./run-test "$0"
+fi