diff options
author | 2001-10-30 16:53:13 +0000 | |
---|---|---|
committer | 2001-10-30 16:53:13 +0000 | |
commit | d15446e51929968bd78b316fad366e6a79b9e9fb (patch) | |
tree | 72f0506cb034586e08a10d07fd067e0caaceb064 /lib/libc/time/ialloc.c | |
parent | correct open() checks (diff) | |
download | wireguard-openbsd-d15446e51929968bd78b316fad366e6a79b9e9fb.tar.xz wireguard-openbsd-d15446e51929968bd78b316fad366e6a79b9e9fb.zip |
correct realloc() misuse
Diffstat (limited to 'lib/libc/time/ialloc.c')
-rw-r--r-- | lib/libc/time/ialloc.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/libc/time/ialloc.c b/lib/libc/time/ialloc.c index 39bb4db7dce..648b75be7c1 100644 --- a/lib/libc/time/ialloc.c +++ b/lib/libc/time/ialloc.c @@ -1,6 +1,6 @@ #if defined(LIBC_SCCS) && !defined(lint) && !defined(NOID) static char elsieid[] = "@(#)ialloc.c 8.29"; -static char rcsid[] = "$OpenBSD: ialloc.c,v 1.5 1998/08/14 21:39:43 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: ialloc.c,v 1.6 2001/10/30 16:53:13 deraadt Exp $"; #endif /* LIBC_SCCS and not lint */ /*LINTLIBRARY*/ @@ -31,9 +31,14 @@ irealloc(pointer, size) void * const pointer; const int size; { + void *p; + if (pointer == NULL) return imalloc(size); - return realloc((void *) pointer, (size_t) nonzero(size)); + p = realloc((void *) pointer, (size_t) nonzero(size)); + if (p == NULL && pointer) + free(pointer); + return p; } char * @@ -49,7 +54,8 @@ const char * const new; oldsize = 0; else if (newsize == 0) return old; - else oldsize = strlen(old); + else + oldsize = strlen(old); if ((result = irealloc(old, oldsize + newsize + 1)) != NULL) if (new != NULL) (void) strcpy(result + oldsize, new); |