#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)
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);
}
*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;
{
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);
}
else if (*s == ':')
{
cur = rfc822_new_address ();
- terminate_string (phrase, phraselen);
+ terminate_buffer (phrase, phraselen);
cur->mailbox = safe_strdup (phrase);
cur->group = 1;
{
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
}
else if (*s == '<')
{
- terminate_string (phrase, phraselen);
+ terminate_buffer (phrase, phraselen);
cur = rfc822_new_address ();
if (phraselen)
{
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