projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
catch unparsable addresses
[mmh]
/
uip
/
spost.c
diff --git
a/uip/spost.c
b/uip/spost.c
index
96ca14d
..
780b5f4
100644
(file)
--- a/
uip/spost.c
+++ b/
uip/spost.c
@@
-76,7
+76,7
@@
static struct headers NHeaders[] = {
{ "Subject", HSUB, 0 },
{ "To", HADR|HTRY, MVIS },
{ "Cc", HADR|HTRY, MVIS },
{ "Subject", HSUB, 0 },
{ "To", HADR|HTRY, MVIS },
{ "Cc", HADR|HTRY, MVIS },
- { "Dcc", HADR|HTRY|HDCC, MVIS },
+ { "Dcc", HADR|HTRY|HDCC, MINV },
{ "Bcc", HADR|HTRY|HBCC, MINV },
{ "Message-Id", HBAD, 0 },
{ "Fcc", HFCC, 0 },
{ "Bcc", HADR|HTRY|HBCC, MINV },
{ "Message-Id", HBAD, 0 },
{ "Fcc", HFCC, 0 },
@@
-92,7
+92,7
@@
static struct headers RHeaders[] = {
{ "Resent-Subject", HSUB, 0 },
{ "Resent-To", HADR|HTRY, MVIS },
{ "Resent-Cc", HADR|HTRY, MVIS },
{ "Resent-Subject", HSUB, 0 },
{ "Resent-To", HADR|HTRY, MVIS },
{ "Resent-Cc", HADR|HTRY, MVIS },
- { "Resent-Dcc", HADR|HTRY|HDCC, MVIS },
+ { "Resent-Dcc", HADR|HTRY|HDCC, MINV },
{ "Resent-Bcc", HADR|HTRY|HBCC, MINV },
{ "Resent-Message-Id", HBAD, 0 },
{ "Resent-Fcc", HFCC, 0 },
{ "Resent-Bcc", HADR|HTRY|HBCC, MINV },
{ "Resent-Message-Id", HBAD, 0 },
{ "Resent-Fcc", HFCC, 0 },
@@
-357,7
+357,8
@@
putfmt(char *name, char *str, FILE *out)
int i;
struct headers *hdr;
struct mailname addr_start, *addr_end;
int i;
struct headers *hdr;
struct mailname addr_start, *addr_end;
- size_t addrc;
+ size_t addrc = 0;
+ ssize_t ret;
addr_end = &addr_start;
addr_end->m_next = NULL;
addr_end = &addr_start;
addr_end->m_next = NULL;
@@
-411,7
+412,11
@@
putfmt(char *name, char *str, FILE *out)
return;
}
return;
}
- addrc = getmboxes(str, &addr_end);
+ if ((ret = getmboxes(str, &addr_end)) < 0) {
+ adios(EX_DATAERR, NULL, "can't parse address: %s", str);
+ }
+
+ addrc += ret;
if (aliasflg) {
addrc += do_aliasing(&addr_start, &addr_end);
if (aliasflg) {
addrc += do_aliasing(&addr_start, &addr_end);
@@
-426,7
+431,6
@@
putfmt(char *name, char *str, FILE *out)
if (hdr->set & MFRM) {
struct mailname *mp = NULL;
struct mailname *my = NULL;
if (hdr->set & MFRM) {
struct mailname *mp = NULL;
struct mailname *my = NULL;
- unsigned int fromcnt = 0;
/* needed because the address parser holds global state */
ismymbox(NULL);
/* needed because the address parser holds global state */
ismymbox(NULL);
@@
-438,10
+442,9
@@
putfmt(char *name, char *str, FILE *out)
my = mp;
}
}
my = mp;
}
}
- fromcnt++;
}
}
- if (fromcnt > 1) {
+ if (addrc > 1) {
sender = my;
}
}
sender = my;
}
}
@@
-531,7
+534,7
@@
get_header(char *header, struct headers *table)
static void
putadr(char *name, struct mailname *nl)
{
static void
putadr(char *name, struct mailname *nl)
{
- struct mailname *mp, *mp2;
+ struct mailname *mp;
int linepos;
int namelen;
int linepos;
int namelen;
@@
-545,7
+548,6
@@
putadr(char *name, struct mailname *nl)
linepos = namelen;
}
linepos = putone(mp->m_text, linepos, namelen);
linepos = namelen;
}
linepos = putone(mp->m_text, linepos, namelen);
- mp2 = mp;
mp = mp->m_next;
}
putc('\n', out);
mp = mp->m_next;
}
putc('\n', out);
@@
-681,6
+683,7
@@
do_aliasing(struct mailname *start, struct mailname **end)
struct mailname *prev, *cur;
char *cp;
size_t i = 0;
struct mailname *prev, *cur;
char *cp;
size_t i = 0;
+ ssize_t e;
prev = start;
cur = prev->m_next;
prev = start;
cur = prev->m_next;
@@
-690,7
+693,10
@@
do_aliasing(struct mailname *start, struct mailname **end)
cp = akvalue(cur->m_mbox);
if (strcmp(cp, cur->m_mbox) != 0) {
prev->m_next = cur->m_next;
cp = akvalue(cur->m_mbox);
if (strcmp(cp, cur->m_mbox) != 0) {
prev->m_next = cur->m_next;
- i += getmboxes(cp, &prev);
+ if ((e = getmboxes(cp, &prev)) < 0) {
+ goto error;
+ }
+ i += e;
i -= 1;
mnfree(cur);
} else {
i -= 1;
mnfree(cur);
} else {
@@
-703,4
+709,7
@@
do_aliasing(struct mailname *start, struct mailname **end)
}
*end = prev;
return i;
}
*end = prev;
return i;
+error:
+ adios(EX_CONFIG, NULL, "can't parse alias %s: %s", cur->m_mbox, cp);
+ return 0; /* not reached */
}
}