Module Name: src
Committed By: rillig
Date: Sat May 25 21:07:48 UTC 2024
Modified Files:
src/usr.bin/make: compat.c job.c make.h parse.c targ.c
Log Message:
make: fix memory leak for command strings
To generate a diff of this commit:
cvs rdiff -u -r1.256 -r1.257 src/usr.bin/make/compat.c
cvs rdiff -u -r1.472 -r1.473 src/usr.bin/make/job.c
cvs rdiff -u -r1.334 -r1.335 src/usr.bin/make/make.h
cvs rdiff -u -r1.725 -r1.726 src/usr.bin/make/parse.c
cvs rdiff -u -r1.182 -r1.183 src/usr.bin/make/targ.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/compat.c
diff -u src/usr.bin/make/compat.c:1.256 src/usr.bin/make/compat.c:1.257
--- src/usr.bin/make/compat.c:1.256 Sat May 25 15:37:17 2024
+++ src/usr.bin/make/compat.c Sat May 25 21:07:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.256 2024/05/25 15:37:17 rillig Exp $ */
+/* $NetBSD: compat.c,v 1.257 2024/05/25 21:07:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -91,7 +91,7 @@
#include "pathnames.h"
/* "@(#)compat.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: compat.c,v 1.256 2024/05/25 15:37:17 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.257 2024/05/25 21:07:48 rillig Exp $");
static GNode *curTarg = NULL;
static pid_t compatChild;
@@ -278,11 +278,13 @@ Compat_RunCommand(const char *cmdp, GNod
* usual '$$'.
*/
Lst_Append(&endNode->commands, cmdStart);
- return true;
+ goto register_command;
}
}
if (strcmp(cmdStart, "...") == 0) {
gn->type |= OP_SAVE_CMDS;
+ register_command:
+ Parse_RegisterCommand(cmdStart);
return true;
}
@@ -302,7 +304,7 @@ Compat_RunCommand(const char *cmdp, GNod
while (ch_isspace(*cmd))
cmd++;
if (cmd[0] == '\0')
- return true;
+ goto register_command;
useShell = UseShell(cmd);
@@ -312,7 +314,7 @@ Compat_RunCommand(const char *cmdp, GNod
}
if (!doIt && !GNode_ShouldExecute(gn))
- return true;
+ goto register_command;
DEBUG1(JOB, "Execute: '%s'\n", cmd);
Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.472 src/usr.bin/make/job.c:1.473
--- src/usr.bin/make/job.c:1.472 Sat May 25 08:03:19 2024
+++ src/usr.bin/make/job.c Sat May 25 21:07:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.472 2024/05/25 08:03:19 rillig Exp $ */
+/* $NetBSD: job.c,v 1.473 2024/05/25 21:07:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -141,7 +141,7 @@
#include "trace.h"
/* "@(#)job.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: job.c,v 1.472 2024/05/25 08:03:19 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.473 2024/05/25 21:07:48 rillig Exp $");
/*
* A shell defines how the commands are run. All commands for a target are
@@ -1035,6 +1035,7 @@ JobSaveCommands(Job *job)
EvalStack_Pop();
/* TODO: handle errors */
Lst_Append(&Targ_GetEndNode()->commands, expanded_cmd);
+ Parse_RegisterCommand(expanded_cmd);
}
}
Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.334 src/usr.bin/make/make.h:1.335
--- src/usr.bin/make/make.h:1.334 Sat May 25 00:00:25 2024
+++ src/usr.bin/make/make.h Sat May 25 21:07:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.334 2024/05/25 00:00:25 rillig Exp $ */
+/* $NetBSD: make.h,v 1.335 2024/05/25 21:07:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -915,6 +915,15 @@ void Targ_PrintType(GNodeType);
void Targ_PrintGraph(int);
void Targ_Propagate(void);
const char *GNodeMade_Name(GNodeMade) MAKE_ATTR_USE;
+#ifdef CLEANUP
+void Parse_RegisterCommand(char *);
+#else
+/* ARGSUSED */
+MAKE_INLINE
+void Parse_RegisterCommand(char *cmd MAKE_ATTR_UNUSED)
+{
+}
+#endif
/* var.c */
void Var_Init(void);
Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.725 src/usr.bin/make/parse.c:1.726
--- src/usr.bin/make/parse.c:1.725 Sat May 25 08:03:19 2024
+++ src/usr.bin/make/parse.c Sat May 25 21:07:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.725 2024/05/25 08:03:19 rillig Exp $ */
+/* $NetBSD: parse.c,v 1.726 2024/05/25 21:07:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -105,7 +105,7 @@
#include "pathnames.h"
/* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: parse.c,v 1.725 2024/05/25 08:03:19 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.726 2024/05/25 21:07:48 rillig Exp $");
/* Detects a multiple-inclusion guard in a makefile. */
typedef enum {
@@ -218,9 +218,9 @@ static GNodeList *targets;
#ifdef CLEANUP
/*
* All shell commands for all targets, in no particular order and possibly
- * with duplicates. Kept in a separate list since the commands from .USE or
- * .USEBEFORE nodes are shared with other GNodes, thereby giving up the
- * easily understandable ownership over the allocated strings.
+ * with duplicate values. Kept in a separate list since the commands from
+ * .USE or .USEBEFORE nodes are shared with other GNodes, thereby giving up
+ * the easily understandable ownership over the allocated strings.
*/
static StringList targCmds = LST_INIT;
#endif
@@ -2674,6 +2674,13 @@ FinishDependencyGroup(void)
targets = NULL;
}
+#ifdef CLEANUP
+void Parse_RegisterCommand(char *cmd)
+{
+ Lst_Append(&targCmds, cmd);
+}
+#endif
+
/* Add the command to each target from the current dependency spec. */
static void
ParseLine_ShellCommand(const char *p)
@@ -2696,9 +2703,7 @@ ParseLine_ShellCommand(const char *p)
GNode *gn = ln->datum;
GNode_AddCommand(gn, cmd);
}
-#ifdef CLEANUP
- Lst_Append(&targCmds, cmd);
-#endif
+ Parse_RegisterCommand(cmd);
}
}
Index: src/usr.bin/make/targ.c
diff -u src/usr.bin/make/targ.c:1.182 src/usr.bin/make/targ.c:1.183
--- src/usr.bin/make/targ.c:1.182 Sat May 25 00:00:25 2024
+++ src/usr.bin/make/targ.c Sat May 25 21:07:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: targ.c,v 1.182 2024/05/25 00:00:25 rillig Exp $ */
+/* $NetBSD: targ.c,v 1.183 2024/05/25 21:07:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -107,7 +107,7 @@
#include "dir.h"
/* "@(#)targ.c 8.2 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: targ.c,v 1.182 2024/05/25 00:00:25 rillig Exp $");
+MAKE_RCSID("$NetBSD: targ.c,v 1.183 2024/05/25 21:07:48 rillig Exp $");
/*
* All target nodes that appeared on the left-hand side of one of the
@@ -219,9 +219,7 @@ GNode_New(const char *name)
static void
GNode_Free(GNode *gn)
{
-#ifdef CLEANUP
Var_DeleteAll(gn);
-#endif
free(gn->name);
free(gn->uname);