From bcc820ea743e0448b26a8fee5e8e0a9f85bc3c70 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Mon, 18 Aug 2014 11:29:46 +0200
Subject: Handle CRLF line endings in iCal files
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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>
---
 src/ical.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

(limited to 'src')

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);
-- 
cgit v1.2.3-70-g09d2