Module Name:    src
Committed By:   rillig
Date:           Tue Jun 25 05:18:39 UTC 2024

Modified Files:
        src/usr.bin/make: job.c test-variants.mk

Log Message:
make: fix invalid-free for custom shell definitions

Don't try to free a pointer that is taken from the middle of a string,
in this case a shell specification.


To generate a diff of this commit:
cvs rdiff -u -r1.476 -r1.477 src/usr.bin/make/job.c
cvs rdiff -u -r1.8 -r1.9 src/usr.bin/make/test-variants.mk

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/job.c
diff -u src/usr.bin/make/job.c:1.476 src/usr.bin/make/job.c:1.477
--- src/usr.bin/make/job.c:1.476	Sat Jun 15 20:02:45 2024
+++ src/usr.bin/make/job.c	Tue Jun 25 05:18:38 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.476 2024/06/15 20:02:45 rillig Exp $	*/
+/*	$NetBSD: job.c,v 1.477 2024/06/25 05:18:38 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.476 2024/06/15 20:02:45 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.477 2024/06/25 05:18:38 rillig Exp $");
 
 /*
  * A shell defines how the commands are run.  All commands for a target are
@@ -2137,7 +2137,7 @@ InitShellNameAndPath(void)
 
 #ifdef DEFSHELL_CUSTOM
 	if (shellName[0] == '/') {
-		shellPath = shellName;
+		shellPath = bmake_strdup(shellName);
 		shellName = str_basename(shellPath);
 		return;
 	}
@@ -2480,7 +2480,7 @@ Job_ParseShell(char *line)
 		}
 	} else {
 		free(UNCONST(shellPath));
-		shellPath = path;
+		shellPath = bmake_strdup(path);
 		shellName = newShell.name != NULL ? newShell.name
 		    : str_basename(path);
 		if (!fullSpec) {

Index: src/usr.bin/make/test-variants.mk
diff -u src/usr.bin/make/test-variants.mk:1.8 src/usr.bin/make/test-variants.mk:1.9
--- src/usr.bin/make/test-variants.mk:1.8	Sat May 25 00:00:25 2024
+++ src/usr.bin/make/test-variants.mk	Tue Jun 25 05:18:38 2024
@@ -1,4 +1,4 @@
-# $NetBSD: test-variants.mk,v 1.8 2024/05/25 00:00:25 rillig Exp $
+# $NetBSD: test-variants.mk,v 1.9 2024/06/25 05:18:38 rillig Exp $
 #
 # Build several variants of make and run the tests on them.
 #
@@ -200,8 +200,15 @@ CFLAGS.gcc-warn+=	-Wno-error=duplicated-
 
 .for shell in /usr/pkg/bin/bash /usr/pkg/bin/dash
 .  if exists(${shell})
-TESTS+=		${shell:T}
+TESTS+=			${shell:T}
 CPPFLAGS.${shell:T}=	-DDEFSHELL_CUSTOM="\"${shell}\""
+
+.    for name in ${shell:T}-sanitize
+TESTS+=			${name}
+ENV.${name}=		MKSANITIZER=yes LIMIT_RESOURCES=:
+CPPFLAGS.${name}=	-DDEFSHELL_CUSTOM="\"${shell}\"" -DCLEANUP
+CFLAGS.${name}=		-ggdb -O0
+.    endfor
 .  endif
 .endfor
 

Reply via email to