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 /src | |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/ical.c | 16 |
1 files changed, 12 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); |