X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Faddrsbr.c;h=96fa72f02a53ab74dbd612877300c2cfb55714c0;hb=4cc601f996579386ce4f4937b9b72b7b3d891107;hp=8915798270a0303cdd315a3d61364a9711a14e46;hpb=fa191d6436c1fc25e645b8d88964e0fe648451d4;p=mmh diff --git a/sbr/addrsbr.c b/sbr/addrsbr.c index 8915798..96fa72f 100644 --- a/sbr/addrsbr.c +++ b/sbr/addrsbr.c @@ -252,10 +252,10 @@ ismymbox(struct mailname *np) if (am == NULL) { mq.m_next = NULL; mq.m_mbox = getusername(); + mp = &mq; if ((am = context_find("alternate-mailboxes")) == NULL) { am = getusername(); } else { - mp = &mq; oops = 0; while ((cp = getname(am))) { if ((mp->m_next = getm(cp, NULL, 0, AD_NAME, NULL)) == NULL) { @@ -410,17 +410,21 @@ local_test: ; * number of parsed addresses. element is set to * the last parsed addresse. */ -size_t +ssize_t getmboxes(char *line, struct mailname **element) { - struct mailname *mp, *next; + struct mailname *mp, *next, *first; char *cp; size_t i = 0; - next = (*element)->m_next; + first = *element; + next = first->m_next; while ((cp = getname(line))) { mp = getm(cp, NULL, 0, AD_HOST, NULL); + if (mp == NULL) { + goto error; + } (*element)->m_next = mp; *element = mp; i++; @@ -428,4 +432,12 @@ getmboxes(char *line, struct mailname **element) (*element)->m_next = next; return i; +error: + while (first->m_next != NULL && first->m_next != next) { + mp = first->m_next; + first->m_next = mp->m_next; + free(mp); + } + first->m_next = next; + return -1; }