diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2014-08-18 11:29:46 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2014-08-18 11:37:41 +0200 |
commit | bcc820ea743e0448b26a8fee5e8e0a9f85bc3c70 (patch) | |
tree | 06ba51636861f41832e5a1f4485d8105a6a67a7f | |
parent | e57b9654ff90230bc8b0631753b3dc0c829a9747 (diff) | |
download | calcurse-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.c | 16 | ||||
-rw-r--r-- | test/Makefile.am | 2 | ||||
-rw-r--r-- | test/data/ical-004.ical | 12 | ||||
-rwxr-xr-x | test/ical-004.sh | 28 |
4 files changed, 54 insertions, 4 deletions
@@ -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 |