Commit aff05428 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Stop checking for CRLF when start of buffer is reached.

Add rest of long line fix which got missed before
parent beab098d
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -376,10 +376,11 @@ int SMIME_crlf_copy(BIO *in, BIO *out, int flags)
		BIO_printf(out, "Content-Type: text/plain\r\n\r\n");
	while ((len = BIO_gets(in, linebuf, MAX_SMLEN)) > 0) {
		eol = 0;
		while(iscrlf(linebuf[len - 1])) {
		while(len && iscrlf(linebuf[len - 1])) {
			len--;
			eol = 1;
		}
		if (len)
			BIO_write(out, linebuf, len);
		if(eol) BIO_write(out, "\r\n", 2);
	}
@@ -423,6 +424,7 @@ static int multi_split(BIO *bio, char *bound, STACK_OF(BIO) **ret)
{
	char linebuf[MAX_SMLEN];
	int len, blen;
	int eol = 0, next_eol = 0;
	BIO *bpart = NULL;
	STACK_OF(BIO) *parts;
	char state, part, first;
@@ -442,14 +444,20 @@ static int multi_split(BIO *bio, char *bound, STACK_OF(BIO) **ret)
			sk_BIO_push(parts, bpart);
			return 1;
		} else if(part) {
			/* Strip CR+LF from linebuf */
			next_eol = 0;
			while(len && iscrlf(linebuf[len - 1])) {
				next_eol = 1;
				len--;
			}
			if(first) {
				first = 0;
				if(bpart) sk_BIO_push(parts, bpart);
				bpart = BIO_new(BIO_s_mem());
				
			} else BIO_write(bpart, "\r\n", 2);
			/* Strip CR+LF from linebuf */
			while(iscrlf(linebuf[len - 1])) len--;
			} else if (eol)
				BIO_write(bpart, "\r\n", 2);
			eol = next_eol;
			if (len)
				BIO_write(bpart, linebuf, len);
		}
	}