From 17ce15185fd5251a4fe8cec02950f0246d891e20 Mon Sep 17 00:00:00 2001 From: Ken Hornstein Date: Tue, 4 Feb 2014 11:19:24 -0500 Subject: [PATCH] Fix encoder so at least one case of LF -> CR LF conversion happens correctly. --- sbr/base64.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sbr/base64.c b/sbr/base64.c index 6682c3f3..7ceb27b9 100644 --- a/sbr/base64.c +++ b/sbr/base64.c @@ -17,6 +17,7 @@ writeBase64aux (FILE *in, FILE *out, int crlf) { unsigned int cc, n; unsigned char inbuf[3]; + int skipnl = 0; n = BPERLIN; while ((cc = fread (inbuf, sizeof(*inbuf), sizeof(inbuf), in)) > 0) { @@ -39,7 +40,7 @@ writeBase64aux (FILE *in, FILE *out, int crlf) unsigned int i; for (i = 0; i < cc; i++) { - if (inbuf[i] == '\n') { + if (inbuf[i] == '\n' && !skipnl) { inbuf[i] = '\r'; /* * If it's the last character in the buffer, we can just @@ -48,6 +49,7 @@ writeBase64aux (FILE *in, FILE *out, int crlf) */ if (i == cc - 1) { ungetc('\n', in); + skipnl = 1; } else { /* This only works as long as sizeof(inbuf) == 3 */ ungetc(inbuf[cc - 1], in); @@ -55,6 +57,8 @@ writeBase64aux (FILE *in, FILE *out, int crlf) inbuf[2] = inbuf[1]; inbuf[++i] = '\n'; } + } else { + skipnl = 0; } } } -- 2.56.0