File: fgets1023.patch

package info (click to toggle)
qpopper 2.53-7
  • links: PTS
  • area: main
  • in suites: potato
  • size: 656 kB
  • ctags: 372
  • sloc: ansic: 5,020; makefile: 132; sh: 54
file content (108 lines) | stat: -rw-r--r-- 2,987 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
--- qpopper-2.53/pop_dropcopy.c.orig	Sun Mar 12 17:22:41 2000
+++ qpopper-2.53/pop_dropcopy.c	Sun May 14 12:50:19 2000
@@ -284,6 +284,7 @@
     int			    uidl_found;
     int			    expecting_trailer;
     int			    content_length, content_nchar, cont_len;
+    int			    nldelim;
     char                    buffer[MAXLINELEN];		/*  Read buffer */
     MD5_CTX		    mdContext;
     unsigned char	    digest[16];
@@ -329,6 +330,7 @@
     newline = 1;
     rewind(p->drop);
 
+    nldelim = 1;
     inheader = 0;
     msg_num = 0;
     uidl_found = 0;
@@ -347,7 +349,7 @@
     for (mp=p->mlp - 1; fgets(buffer, MAXMSGLINELEN, p->drop);) {
 	nchar = strlen(buffer);
 
-	if ((content_nchar >= content_length) &&
+	if (nldelim && (content_nchar >= content_length) &&
 	    (p->mmdf_separator ? !strcmp(p->mmdf_separator, buffer) :
 	    isfromline(buffer))) {
 
@@ -411,7 +413,7 @@
 	    continue;	/* Don't count message separator in total size */
 	}
 	
-	if (inheader) {
+	if (nldelim && inheader) {
 	    if (*buffer == '\n') {
 		inheader = 0;
 		content_length = cont_len;
@@ -473,14 +475,15 @@
 		    mp->orig_retr_state = TRUE;
 		}
 	    }
-	} else {
+	} else if (!inheader) {
 	    content_nchar += nchar;
-	    mp->body_lines++;
+	    if (nchar > 0 && buffer[nchar - 1] == '\n') mp->body_lines++;
 	}
 
+	nldelim = (nchar > 0 && buffer[nchar - 1] == '\n');
 	mp->length += nchar + 1;
 	p->drop_size += nchar + 1;
-	mp->lines++;
+	if (nldelim) mp->lines++;
     }
 
     p->msg_count = msg_num;
@@ -506,6 +509,7 @@
     int                     nchar;                  /*  Bytes written/read */
     int			    inheader;		    /*  Header section flag */
     int			    uidl_found;		    /*  UIDL header flag */
+    int			    nldelim;
     int			    msg_num;
     int			    expecting_trailer;
     int			    content_length, content_nchar, cont_len;
@@ -548,6 +552,7 @@
     /*  Scan the file, loading the message information list with 
         information about each message */
 
+    nldelim = 1;
     inheader = 0;
     uidl_found = 0;
     expecting_trailer = 0;
@@ -579,7 +584,7 @@
 		    p->temp_drop, errno);
 	}
 
-	if ((content_nchar >= content_length) &&
+	if (nldelim && (content_nchar >= content_length) &&
 	    (p->mmdf_separator ? !strcmp(p->mmdf_separator, buffer) :
 	    isfromline(buffer))) {
 
@@ -644,7 +649,7 @@
 	    continue;	/* Do not include From separator in message size */
         } 
 
-	if (inheader) {
+	if (nldelim && inheader) {
 	    if (*buffer == '\n') {
 		inheader = 0;
 		mp->body_lines = 1;
@@ -710,14 +715,15 @@
 		    mp->orig_retr_state = TRUE;
 		}
 	    }
-	} else {
+	} else if (!inheader) {
 	    content_nchar += nchar;
-	    mp->body_lines++;
+	    if (nchar > 0 && buffer[nchar - 1] == '\n') mp->body_lines++;
 	}
 
+	nldelim = (nchar > 0 && buffer[nchar - 1] == '\n');
         mp->length += nchar + 1;
         p->drop_size += nchar + 1;
-        mp->lines++;
+        if (nldelim) mp->lines++;
     }
 
     p->msg_count = msg_num;