Date: Sat, 14 Jun 1997 09:07:46 -0400 (EDT) From: Tim Vanderhoek <tim@X2296> To: Bruce Evans <bde@zeta.org.au> Cc: ac199@hwcn.org, freebsd-bugs@hub.freebsd.org, freebsd-gnats-submit@freebsd.org Subject: Re: bin/3451: vasprintf() doesn't work. Message-ID: <Pine.BSF.3.95q.970614085707.169A-100000@X2296> In-Reply-To: <199706140156.LAA12946@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 14 Jun 1997, Bruce Evans wrote: > > *str = realloc(h.base, (size_t)(h.size - h.left + 1)); > > if (*str == NULL) /* failed to realloc it to actual size */ > > ! return (-1); > > ! (*str)[h.size - h.left] = '\0'; > > return (ret); > > } > > One more problem: realloc() can fail, resulting in a leaking the memory > pointed to by h.base. Which, of course, points us to yet another error in the original vasprintf.c... :) The test to see if str is NULL is *str == NULL.... Final patch frees h.base (as is done everywhere else) and fixes that... :) *** old.vasprintf.c Tue Apr 29 21:32:00 1997 --- vasprintf.c Sat Jun 14 08:56:41 1997 *************** *** 111,119 **** if (h.base == NULL) /* failed to realloc in writehook */ return (-1); - h.base[h.size - h.left] = '\0'; *str = realloc(h.base, (size_t)(h.size - h.left + 1)); ! if (*str == NULL) /* failed to realloc it to actual size */ ! *str = h.base; /* return oversize buffer */ return (ret); } --- 111,121 ---- if (h.base == NULL) /* failed to realloc in writehook */ return (-1); *str = realloc(h.base, (size_t)(h.size - h.left + 1)); ! if (str == NULL) { /* failed to realloc it to actual size */ ! free(h.base); ! return (-1); ! } ! (*str)[h.size - h.left] = '\0'; return (ret); } -- tIM...HOEk optimization: The theory that making your code incomprehensible by using only one-letter variable names will make it run faster.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.95q.970614085707.169A-100000>