X-Git-Url: https://git.hcoop.net/hcoop/debian/courier-authlib.git/blobdiff_plain/ac40fd9eb9d1980c90dc009d526a23ead1ec0f76..8d138742ae268344f406cb75d79aa6bf853f9d87:/rfc822/rfc822_getaddrs.c diff --git a/rfc822/rfc822_getaddrs.c b/rfc822/rfc822_getaddrs.c index ed5bc59..a17113f 100644 --- a/rfc822/rfc822_getaddrs.c +++ b/rfc822/rfc822_getaddrs.c @@ -1,10 +1,10 @@ /* -** Copyright 1998 - 1999 Double Precision, Inc. +** Copyright 1998 - 2009 Double Precision, Inc. ** See COPYING for distribution information. */ /* -** $Id: rfc822_getaddrs.c,v 1.5 1999/12/06 13:29:49 mrsam Exp $ +** $Id: rfc822_getaddrs.c,v 1.6 2009/11/08 18:14:47 mrsam Exp $ */ #include "rfc822.h" #include @@ -32,15 +32,22 @@ static void saveaddrsep(const char *p, void *ptr) char *rfc822_getaddrs(const struct rfc822a *rfc) { -size_t addrbuflen=0; -char *addrbuf, *ptr; + size_t addrbuflen=0; + char *addrbuf, *ptr; + + if (rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen) < 0) + return NULL; - rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen); if (!(addrbuf=malloc(addrbuflen+1))) return (0); ptr=addrbuf; - rfc822_print(rfc, &saveaddr, &saveaddrsep, &ptr); + if (rfc822_print(rfc, &saveaddr, &saveaddrsep, &ptr) < 0) + { + free(addrbuf); + return NULL; + } + addrbuf[addrbuflen]=0; return (addrbuf); } @@ -58,15 +65,23 @@ int c; char *rfc822_getaddrs_wrap(const struct rfc822a *rfc, int w) { -size_t addrbuflen=0; -char *addrbuf, *ptr, *start, *lastnl; + size_t addrbuflen=0; + char *addrbuf, *ptr, *start, *lastnl; + + if (rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen) < 0) + return NULL; - rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen); if (!(addrbuf=malloc(addrbuflen+1))) return (0); ptr=addrbuf; - rfc822_print(rfc, &saveaddr, &saveaddrsep_wrap, &ptr); + + if (rfc822_print(rfc, &saveaddr, &saveaddrsep_wrap, &ptr) < 0) + { + free(addrbuf); + return NULL; + } + addrbuf[addrbuflen]=0; for (lastnl=0, start=ptr=addrbuf; *ptr; )