e801fa1472
- Resolves: #462090
61 lines
1.4 KiB
Diff
61 lines
1.4 KiB
Diff
diff -urp make-3.81/read.c make-3.81-leak/read.c
|
||
--- make-3.81/read.c 2006-03-17 15:24:20.000000000 +0100
|
||
+++ make-3.81-leak/read.c 2008-09-16 16:43:12.000000000 +0200
|
||
@@ -296,6 +300,37 @@ restore_conditionals (struct conditional
|
||
conditionals = saved;
|
||
}
|
||
|
||
+/* If possible, open the file and mark it close-on-exec, so that make
|
||
+ doesn't leak the descriptor to binaries called via $(shell ...).*/
|
||
+static FILE *
|
||
+open_makefile (char *filename)
|
||
+{
|
||
+ FILE *fp;
|
||
+
|
||
+#if HAVE_FDOPEN
|
||
+ int fd = open (filename, O_RDONLY);
|
||
+ int save;
|
||
+ if (fd < 0)
|
||
+ return NULL;
|
||
+
|
||
+ fp = fdopen (fd, "r");
|
||
+ if (fp == NULL)
|
||
+ {
|
||
+ save = errno;
|
||
+ close (fd);
|
||
+ errno = save;
|
||
+ return NULL;
|
||
+ }
|
||
+
|
||
+ CLOSE_ON_EXEC (fd);
|
||
+
|
||
+#else
|
||
+ fp = fopen (filename, "r");
|
||
+#endif
|
||
+
|
||
+ return fp;
|
||
+}
|
||
+
|
||
static int
|
||
eval_makefile (char *filename, int flags)
|
||
{
|
||
@@ -335,7 +376,8 @@ eval_makefile (char *filename, int flags
|
||
filename = expanded;
|
||
}
|
||
|
||
- ebuf.fp = fopen (filename, "r");
|
||
+ ebuf.fp = open_makefile (filename);
|
||
+
|
||
/* Save the error code so we print the right message later. */
|
||
makefile_errno = errno;
|
||
|
||
@@ -348,7 +390,7 @@ eval_makefile (char *filename, int flags
|
||
for (i = 0; include_directories[i] != 0; ++i)
|
||
{
|
||
included = concat (include_directories[i], "/", filename);
|
||
- ebuf.fp = fopen (included, "r");
|
||
+ ebuf.fp = open_makefile (included);
|
||
if (ebuf.fp)
|
||
{
|
||
filename = included;
|