From: Brandon Casey Date: Tue, 04 Aug 2009 18:50:28 GMT Subject: Re: [PATCH] Let mailsplit and mailinfo handle mails with CRLF line-endings Message-ID: In-Reply-To: Sverre Rabbelier wrote: > Heya, > > On Tue, Aug 4, 2009 at 10:26, Alex Riesen wrote: >> } >> + if (len > 1 && buf[len - 2] == '\r') >> + buf[--len - 1] = '\n'; >> buf[len] = '\0'; > > How about something like: > > + if (len > 1 && buf[len - 2] == '\r' && (buf[len - 1] == '\n' > || buf[len - 1] == '\0')) > + buf[--len - 1] = '\n'; > > To make sure that we're not erasing a \r somewhere in the middle of the content? You may want to push the \r back into the buffer if it is the last character read too. We may reach the limit of size characters without finding a \n, and so we can't tell whether the last \r we read was a solitary \r or whether it is the beginning of \r\n sequence. So maybe we need something like this after the 'for' loop instead: if (c == '\n') { if (len > 1 && buf[len - 2] == '\r') buf[--len - 1] = '\n'; } else if (c == '\r') { ungetc(c, in); len--; } -brandon