summaryrefslogtreecommitdiff
path: root/mail/mutt/files/patch-rfc822.c
blob: 3baa0c8ece3185fd8b8cda3daf3f9302b842058e (plain) (blame)
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
diff -u -r2.9.2.1 rfc822.c
--- rfc822.c	2000/06/22 10:54:58	2.9.2.1
+++ rfc822.c	2002/01/01 10:24:05
@@ -33,6 +33,12 @@
 #include "rfc822.h"
 #endif
 
+#define terminate_string(a, b, c) do { if ((b) < (c)) a[(b)] = 0; else \
+	a[(c)] = 0; } while (0)
+
+#define terminate_buffer(a, b) terminate_string(a, b, sizeof (a) - 1)
+
+
 const char RFC822Specials[] = "@.,:;<>[]\\\"()";
 #define is_special(x) strchr(RFC822Specials,x)
 
@@ -227,12 +233,12 @@
       return NULL;
   }
 
-  token[*tokenlen] = 0;
+  terminate_string (token, *tokenlen, tokenmax);
   addr->mailbox = safe_strdup (token);
 
   if (*commentlen && !addr->personal)
   {
-    comment[*commentlen] = 0;
+    terminate_string (comment, *commentlen, commentmax);
     addr->personal = safe_strdup (comment);
   }
 
@@ -320,9 +326,6 @@
   *last = cur;
 }
 
-#define terminate_string(a, b) do { if (b < sizeof(a) - 1) a[b] = 0; else \
-	a[sizeof(a) - 1] = 0; } while (0)
-
 ADDRESS *rfc822_parse_adrlist (ADDRESS *top, const char *s)
 {
   const char *begin, *ps;
@@ -344,12 +347,12 @@
     {
       if (phraselen)
       {
-	terminate_string (phrase, phraselen);
+	terminate_buffer (phrase, phraselen);
 	add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
       }
       else if (commentlen && last && !last->personal)
       {
-	terminate_string (comment, commentlen);
+	terminate_buffer (comment, commentlen);
 	last->personal = safe_strdup (comment);
       }
 
@@ -377,7 +380,7 @@
     else if (*s == ':')
     {
       cur = rfc822_new_address ();
-      terminate_string (phrase, phraselen);
+      terminate_buffer (phrase, phraselen);
       cur->mailbox = safe_strdup (phrase);
       cur->group = 1;
 
@@ -401,12 +404,12 @@
     {
       if (phraselen)
       {
-	terminate_string (phrase, phraselen);
+	terminate_buffer (phrase, phraselen);
 	add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
       }
       else if (commentlen && last && !last->personal)
       {
-	terminate_string (phrase, phraselen);
+	terminate_buffer (phrase, phraselen);
 	last->personal = safe_strdup (comment);
       }
 #ifdef EXACT_ADDRESS
@@ -430,7 +433,7 @@
     }
     else if (*s == '<')
     {
-      terminate_string (phrase, phraselen);
+      terminate_buffer (phrase, phraselen);
       cur = rfc822_new_address ();
       if (phraselen)
       {
@@ -459,7 +462,7 @@
     }
     else
     {
-      if (phraselen && phraselen < sizeof (phrase) - 1)
+      if (phraselen && phraselen < sizeof (phrase) - 1 && *s != '.')
 	phrase[phraselen++] = ' ';
       if ((ps = next_token (s, phrase, &phraselen, sizeof (phrase) - 1)) == NULL)
       {
@@ -473,13 +476,13 @@
   
   if (phraselen)
   {
-    terminate_string (phrase, phraselen);
-    terminate_string (comment, commentlen);
+    terminate_buffer (phrase, phraselen);
+    terminate_buffer (comment, commentlen);
     add_addrspec (&top, &last, phrase, comment, &commentlen, sizeof (comment) - 1);
   }
   else if (commentlen && last && !last->personal)
   {
-    terminate_string (comment, commentlen);
+    terminate_buffer (comment, commentlen);
     last->personal = safe_strdup (comment);
   }
 #ifdef EXACT_ADDRESS
@@ -498,7 +501,7 @@
     if (!addr->group && addr->mailbox && strchr (addr->mailbox, '@') == NULL)
     {
       p = safe_malloc (mutt_strlen (addr->mailbox) + mutt_strlen (host) + 2);
-      sprintf (p, "%s@%s", addr->mailbox, host);
+      sprintf (p, "%s@%s", addr->mailbox, host);	/* __SPRINTF_CHECKED__ */
       safe_free ((void **) &addr->mailbox);
       addr->mailbox = p;
     }