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>
This commit is contained in:
parent
e57b9654ff
commit
bcc820ea74
12
src/ical.c
12
src/ical.c
@ -399,8 +399,12 @@ ical_readline_init(FILE * fdi, char *buf, char *lstore, unsigned *ln)
|
|||||||
|
|
||||||
*buf = *lstore = '\0';
|
*buf = *lstore = '\0';
|
||||||
if (fgets(lstore, BUFSIZ, fdi)) {
|
if (fgets(lstore, BUFSIZ, fdi)) {
|
||||||
if ((eol = strchr(lstore, '\n')) != NULL)
|
if ((eol = strchr(lstore, '\n')) != NULL) {
|
||||||
|
if (*(eol - 1) == '\r')
|
||||||
|
*(eol - 1) = '\0';
|
||||||
|
else
|
||||||
*eol = '\0';
|
*eol = '\0';
|
||||||
|
}
|
||||||
(*ln)++;
|
(*ln)++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -413,8 +417,12 @@ static int ical_readline(FILE * fdi, char *buf, char *lstore, unsigned *ln)
|
|||||||
(*ln)++;
|
(*ln)++;
|
||||||
|
|
||||||
while (fgets(lstore, BUFSIZ, fdi) != NULL) {
|
while (fgets(lstore, BUFSIZ, fdi) != NULL) {
|
||||||
if ((eol = strchr(lstore, '\n')) != NULL)
|
if ((eol = strchr(lstore, '\n')) != NULL) {
|
||||||
|
if (*(eol - 1) == '\r')
|
||||||
|
*(eol - 1) = '\0';
|
||||||
|
else
|
||||||
*eol = '\0';
|
*eol = '\0';
|
||||||
|
}
|
||||||
if (*lstore != SPACE && *lstore != TAB)
|
if (*lstore != SPACE && *lstore != TAB)
|
||||||
break;
|
break;
|
||||||
strncat(buf, lstore + 1, BUFSIZ - strlen(buf) - 1);
|
strncat(buf, lstore + 1, BUFSIZ - strlen(buf) - 1);
|
||||||
|
@ -45,6 +45,7 @@ TESTS = \
|
|||||||
ical-001.sh \
|
ical-001.sh \
|
||||||
ical-002.sh \
|
ical-002.sh \
|
||||||
ical-003.sh \
|
ical-003.sh \
|
||||||
|
ical-004.sh \
|
||||||
next-001.sh \
|
next-001.sh \
|
||||||
search-001.sh \
|
search-001.sh \
|
||||||
bug-002.sh \
|
bug-002.sh \
|
||||||
@ -105,4 +106,5 @@ EXTRA_DIST = \
|
|||||||
data/ical-001.ical \
|
data/ical-001.ical \
|
||||||
data/ical-002.ical \
|
data/ical-002.ical \
|
||||||
data/ical-003.ical \
|
data/ical-003.ical \
|
||||||
|
data/ical-004.ical \
|
||||||
data/todo
|
data/todo
|
||||||
|
12
test/data/ical-004.ical
Normal file
12
test/data/ical-004.ical
Normal file
@ -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
|
28
test/ical-004.sh
Executable file
28
test/ical-004.sh
Executable file
@ -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
|
Loading…
x
Reference in New Issue
Block a user