From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:55476) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T35RB-0002ZK-E4 for qemu-devel@nongnu.org; Sun, 19 Aug 2012 09:21:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T35RA-0002LA-Hz for qemu-devel@nongnu.org; Sun, 19 Aug 2012 09:21:05 -0400 Received: from cantor2.suse.de ([195.135.220.15]:42028 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T35RA-0002Kw-Bt for qemu-devel@nongnu.org; Sun, 19 Aug 2012 09:21:04 -0400 Message-ID: <5030E83C.4070800@suse.de> Date: Sun, 19 Aug 2012 15:21:00 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1345227891-32449-1-git-send-email-jim@meyering.net> <1345227891-32449-3-git-send-email-jim@meyering.net> In-Reply-To: <1345227891-32449-3-git-send-email-jim@meyering.net> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH for-1.2? v4 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 , Peter Maydell , Riku Voipio , qemu-devel@nongnu.org Am 17.08.2012 20:24, 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 230596f..cf3f2d8 100644 > --- a/envlist.c > +++ b/envlist.c > @@ -245,8 +245,16 @@ envlist_to_environ(const envlist_t *envlist, size_= t *count) > } >=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++) { > + *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 Acked-by: Andreas F=E4rber 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