X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Faddrsbr.c;h=b2e11769e5f6416e45ccd8ff886d99feb987d848;hp=201e8165be81fbf2e284318552abed1990dc5e6f;hb=d4c34b4439a9dbd89664de460ed37ecddc260fb1;hpb=6ee8839fd9f57c6c97fa7e6e0d142d06c5ba09c3 diff --git a/sbr/addrsbr.c b/sbr/addrsbr.c index 201e816..b2e1176 100644 --- a/sbr/addrsbr.c +++ b/sbr/addrsbr.c @@ -104,7 +104,7 @@ getm(char *str, char *dfhost, int dftype, int wanthost, char *eresult) dftype = LOCALHOST; } - mp = (struct mailname *) mh_xcalloc((size_t) 1, sizeof(*mp)); + mp = mh_xcalloc(1, sizeof(*mp)); if (mp == NULL) { if (eresult) strcpy(eresult, "insufficient memory to represent address"); @@ -170,21 +170,21 @@ mnfree(struct mailname *mp) return; if (mp->m_text) - free(mp->m_text); + mh_free0(&(mp->m_text)); if (mp->m_pers) - free(mp->m_pers); + mh_free0(&(mp->m_pers)); if (mp->m_mbox) - free(mp->m_mbox); + mh_free0(&(mp->m_mbox)); if (mp->m_host) - free(mp->m_host); + mh_free0(&(mp->m_host)); if (mp->m_path) - free(mp->m_path); + mh_free0(&(mp->m_path)); if (mp->m_gname) - free(mp->m_gname); + mh_free0(&(mp->m_gname)); if (mp->m_note) - free(mp->m_note); + mh_free0(&(mp->m_note)); - free((char *) mp); + mh_free0(&mp); } @@ -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; + mh_free0(&mp); + } + first->m_next = next; + return -1; }