Stop checking for CRLF when start of buffer is reached.
authorDr. Stephen Henson <steve@openssl.org>
Mon, 2 Jun 2003 01:12:01 +0000 (01:12 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 2 Jun 2003 01:12:01 +0000 (01:12 +0000)
Add rest of long line fix which got missed before

crypto/pkcs7/pk7_mime.c

index 16daf9ecdb70747d95d5350972424237060a6375..4630e3180d4915d0bb2df92d0b491b0c9bf51b1b 100644 (file)
@@ -376,11 +376,12 @@ 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;
-               }       
-               BIO_write(out, linebuf, len);
+               }
+               if (len)
+                       BIO_write(out, linebuf, len);
                if(eol) BIO_write(out, "\r\n", 2);
        }
        return 1;
@@ -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,15 +444,21 @@ 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--;
-                       BIO_write(bpart, linebuf, len);
+                       } else if (eol)
+                               BIO_write(bpart, "\r\n", 2);
+                       eol = next_eol;
+                       if (len)
+                               BIO_write(bpart, linebuf, len);
                }
        }
        return 0;