From cf71bfa9bed42393754de397bd388b0b6032a312 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 14 Nov 2004 20:13:12 +0000 Subject: [PATCH] Fix an inverted conditional which could lead to nameBuf being truncated in the later snprintf(). Noticed-by: Max Okumoto --- usr.bin/make/arch.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/usr.bin/make/arch.c b/usr.bin/make/arch.c index 0ec724e37e..a2c058baa2 100644 --- a/usr.bin/make/arch.c +++ b/usr.bin/make/arch.c @@ -37,7 +37,7 @@ * * @(#)arch.c 8.2 (Berkeley) 1/2/94 * $FreeBSD: src/usr.bin/make/arch.c,v 1.15.2.1 2001/02/13 03:13:57 will Exp $ - * $DragonFly: src/usr.bin/make/arch.c,v 1.11 2004/11/12 22:57:04 dillon Exp $ + * $DragonFly: src/usr.bin/make/arch.c,v 1.12 2004/11/14 20:13:12 dillon Exp $ */ /*- @@ -339,15 +339,17 @@ Arch_ParseArchive (char **linePtr, Lst nodeLst, GNode *ctxt) char *member; size_t sz = MAXPATHLEN; size_t nsz; + nameBuf = emalloc(sz); Dir_Expand(memName, dirSearchPath, members); while (!Lst_IsEmpty(members)) { member = (char *)Lst_DeQueue(members); - nsz = strlen(libName) + strlen(member) + 3; - if (sz > nsz) - nameBuf = erealloc(nameBuf, sz = nsz * 2); - + nsz = strlen(libName) + strlen(member) + 3; /* 3 = ()+\0 */ + if (sz < nsz) { + sz = nsz * 2; + nameBuf = erealloc(nameBuf, sz); + } snprintf(nameBuf, sz, "%s(%s)", libName, member); free(member); gn = Targ_FindNode (nameBuf, TARG_CREATE); -- 2.41.0