From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:42833) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T2P1i-0005M3-8Y for qemu-devel@nongnu.org; Fri, 17 Aug 2012 12:03:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T2P1h-0006Z4-8a for qemu-devel@nongnu.org; Fri, 17 Aug 2012 12:03:58 -0400 Received: from cantor2.suse.de ([195.135.220.15]:42463 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T2P1g-0006Yy-VI for qemu-devel@nongnu.org; Fri, 17 Aug 2012 12:03:57 -0400 Message-ID: <502E6B68.6030807@suse.de> Date: Fri, 17 Aug 2012 18:03:52 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1337681798-22395-1-git-send-email-jim@meyering.net> <1337681798-22395-3-git-send-email-jim@meyering.net> In-Reply-To: <1337681798-22395-3-git-send-email-jim@meyering.net> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCHv3 2/2] envlist.c: handle strdup failure List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jim Meyering Cc: Jim Meyering , qemu-devel@nongnu.org Am 22.05.2012 12:16, schrieb Jim Meyering: > From: Jim Meyering >=20 > Without this, envlist_to_environ may silently fail to copy all > strings into the destination buffer, and both callers would leak > any env strings allocated after a failing strdup, because the > freeing code stops at the first NULL pointer. >=20 > Signed-off-by: Jim Meyering > --- > envlist.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) >=20 > diff --git a/envlist.c b/envlist.c > index e44889b..df5c723 100644 > --- a/envlist.c > +++ b/envlist.c > @@ -234,8 +234,16 @@ envlist_to_environ(const envlist_t *envlist, size_= t *count) > return (NULL); >=20 > for (entry =3D envlist->el_entries.lh_first; entry !=3D NULL; > - entry =3D entry->ev_link.le_next) { > - *(penv++) =3D strdup(entry->ev_var); > + entry =3D entry->ev_link.le_next, penv++) { Scratch my comment on 1/2, there's an added penv++ that I overlooked. Not changing the indentation twice would still be nice. > + *penv =3D strdup(entry->ev_var); > + if (*penv =3D=3D NULL) { > + char **e =3D env; > + while (e <=3D penv) { > + free(*e++); > + } > + free(env); > + return NULL; > + } > } > *penv =3D NULL; /* NULL terminate the list */ >=20 This leak fix looks good then. For anyone wondering like me, the "env" here is not the usual CPUArchState *env but a local char **env. Andreas --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg