Module Name:    src
Committed By:   rillig
Date:           Mon Dec 13 00:33:33 UTC 2021

Modified Files:
        src/usr.bin/make: nonints.h suff.c var.c

Log Message:
make: fix memory leak when evaluating ${.SUFFIX} (since yesterday)


To generate a diff of this commit:
cvs rdiff -u -r1.217 -r1.218 src/usr.bin/make/nonints.h
cvs rdiff -u -r1.357 -r1.358 src/usr.bin/make/suff.c
cvs rdiff -u -r1.973 -r1.974 src/usr.bin/make/var.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/nonints.h
diff -u src/usr.bin/make/nonints.h:1.217 src/usr.bin/make/nonints.h:1.218
--- src/usr.bin/make/nonints.h:1.217	Sun Dec 12 20:45:48 2021
+++ src/usr.bin/make/nonints.h	Mon Dec 13 00:33:33 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: nonints.h,v 1.217 2021/12/12 20:45:48 sjg Exp $	*/
+/*	$NetBSD: nonints.h,v 1.218 2021/12/13 00:33:33 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -184,7 +184,7 @@ void Suff_FindDeps(GNode *);
 SearchPath *Suff_FindPath(GNode *);
 void Suff_SetNull(const char *);
 void Suff_PrintAll(void);
-const char *Suff_NamesStr(void);
+char *Suff_NamesStr(void);
 
 /* targ.c */
 void Targ_Init(void);

Index: src/usr.bin/make/suff.c
diff -u src/usr.bin/make/suff.c:1.357 src/usr.bin/make/suff.c:1.358
--- src/usr.bin/make/suff.c:1.357	Sun Dec 12 20:45:48 2021
+++ src/usr.bin/make/suff.c	Mon Dec 13 00:33:33 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: suff.c,v 1.357 2021/12/12 20:45:48 sjg Exp $	*/
+/*	$NetBSD: suff.c,v 1.358 2021/12/13 00:33:33 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -115,7 +115,7 @@
 #include "dir.h"
 
 /*	"@(#)suff.c	8.4 (Berkeley) 3/21/94"	*/
-MAKE_RCSID("$NetBSD: suff.c,v 1.357 2021/12/12 20:45:48 sjg Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.358 2021/12/13 00:33:33 rillig Exp $");
 
 typedef List SuffixList;
 typedef ListNode SuffixListNode;
@@ -2178,7 +2178,7 @@ Suff_PrintAll(void)
 	}
 }
 
-const char *
+char *
 Suff_NamesStr(void)
 {
 	Buffer buf;

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.973 src/usr.bin/make/var.c:1.974
--- src/usr.bin/make/var.c:1.973	Sun Dec 12 20:45:48 2021
+++ src/usr.bin/make/var.c	Mon Dec 13 00:33:33 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.973 2021/12/12 20:45:48 sjg Exp $	*/
+/*	$NetBSD: var.c,v 1.974 2021/12/13 00:33:33 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.973 2021/12/12 20:45:48 sjg Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.974 2021/12/13 00:33:33 rillig Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -4405,14 +4405,12 @@ ParseVarnameLong(
 	/* At this point, p points just after the variable name,
 	 * either at ':' or at endc. */
 
-	if (v == NULL) {
-		if (Substring_Equals(name, ".SUFFIXES"))
-			v = VarNew(Substring_Str(name),
-			    Suff_NamesStr(), false, true);
-		else
-			v = FindLocalLegacyVar(name, scope,
-			    out_true_extraModifiers);
-	}
+	if (v == NULL && Substring_Equals(name, ".SUFFIXES")) {
+		char *suffixes = Suff_NamesStr();
+		v = VarNew(Substring_Str(name), suffixes, false, true);
+		free(suffixes);
+	} else if (v == NULL)
+		v = FindLocalLegacyVar(name, scope, out_true_extraModifiers);
 
 	if (v == NULL) {
 		/*

Reply via email to