X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Faddrsbr.c;h=96fa72f02a53ab74dbd612877300c2cfb55714c0;hb=4cc601f996579386ce4f4937b9b72b7b3d891107;hp=201e8165be81fbf2e284318552abed1990dc5e6f;hpb=6ee8839fd9f57c6c97fa7e6e0d142d06c5ba09c3;p=mmh diff --git a/sbr/addrsbr.c b/sbr/addrsbr.c index 201e816..96fa72f 100644 --- a/sbr/addrsbr.c +++ b/sbr/addrsbr.c @@ -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; }