Module Name: src Committed By: rillig Date: Mon Apr 1 12:26:02 UTC 2024
Modified Files: src/usr.bin/make: parse.c src/usr.bin/make/unit-tests: directive-for-null.exp directive-for-null.mk opt-file.exp opt-file.mk Log Message: make: exit immediately after reading a null byte from a makefile The chance of other garbage bytes in such a file is just too high. To generate a diff of this commit: cvs rdiff -u -r1.717 -r1.718 src/usr.bin/make/parse.c cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/directive-for-null.exp cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/directive-for-null.mk cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/opt-file.exp cvs rdiff -u -r1.15 -r1.16 src/usr.bin/make/unit-tests/opt-file.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/parse.c diff -u src/usr.bin/make/parse.c:1.717 src/usr.bin/make/parse.c:1.718 --- src/usr.bin/make/parse.c:1.717 Wed Feb 7 06:43:02 2024 +++ src/usr.bin/make/parse.c Mon Apr 1 12:26:02 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.717 2024/02/07 06:43:02 rillig Exp $ */ +/* $NetBSD: parse.c,v 1.718 2024/04/01 12:26:02 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.717 2024/02/07 06:43:02 rillig Exp $"); +MAKE_RCSID("$NetBSD: parse.c,v 1.718 2024/04/01 12:26:02 rillig Exp $"); /* Detects a multiple-inclusion guard in a makefile. */ typedef enum { @@ -2368,7 +2368,7 @@ ParseRawLine(IncludedFile *curFile, char ch = *p; if (ch == '\0' || (ch == '\\' && p[1] == '\0')) { Parse_Error(PARSE_FATAL, "Zero byte read from file"); - return PRLR_ERROR; + exit(2); } /* Treat next character after '\' as literal. */ Index: src/usr.bin/make/unit-tests/directive-for-null.exp diff -u src/usr.bin/make/unit-tests/directive-for-null.exp:1.2 src/usr.bin/make/unit-tests/directive-for-null.exp:1.3 --- src/usr.bin/make/unit-tests/directive-for-null.exp:1.2 Thu Dec 9 20:13:10 2021 +++ src/usr.bin/make/unit-tests/directive-for-null.exp Mon Apr 1 12:26:02 2024 @@ -1,9 +1,5 @@ make: "(stdin)" line 2: Zero byte read from file -make: "(stdin)" line 2: Unexpected end of file in .for loop -make: "(stdin)" line 3: Zero byte read from file -make: Fatal errors encountered -- cannot continue -make: stopped in unit-tests -*** Error code 1 (continuing) +*** Error code 2 (continuing) Stop. make: stopped in unit-tests Index: src/usr.bin/make/unit-tests/directive-for-null.mk diff -u src/usr.bin/make/unit-tests/directive-for-null.mk:1.3 src/usr.bin/make/unit-tests/directive-for-null.mk:1.4 --- src/usr.bin/make/unit-tests/directive-for-null.mk:1.3 Sun Jun 12 15:03:27 2022 +++ src/usr.bin/make/unit-tests/directive-for-null.mk Mon Apr 1 12:26:02 2024 @@ -1,18 +1,8 @@ -# $NetBSD: directive-for-null.mk,v 1.3 2022/06/12 15:03:27 rillig Exp $ +# $NetBSD: directive-for-null.mk,v 1.4 2024/04/01 12:26:02 rillig Exp $ # # Test for parsing a .for loop that accidentally contains a null byte. # -# As of 2020-12-19, there are 3 error messages: -# -# make: "(stdin)" line 2: Zero byte read from file -# make: "(stdin)" line 2: Unexpected end of file in for loop. -# make: "(stdin)" line 3: Zero byte read from file -# -# The one about "end of file" might be misleading but is due to the -# implementation. On both errors and EOF, ParseRawLine returns NULL. -# -# The one about the "zero byte" in line 3 is surprising since the only -# line that contains a null byte is line 2. +# expect: make: "(stdin)" line 2: Zero byte read from file all: .PHONY @printf '%s\n' \ Index: src/usr.bin/make/unit-tests/opt-file.exp diff -u src/usr.bin/make/unit-tests/opt-file.exp:1.7 src/usr.bin/make/unit-tests/opt-file.exp:1.8 --- src/usr.bin/make/unit-tests/opt-file.exp:1.7 Tue Dec 22 08:51:30 2020 +++ src/usr.bin/make/unit-tests/opt-file.exp Mon Apr 1 12:26:02 2024 @@ -2,9 +2,7 @@ value value line-with-trailing-whitespace make: "(stdin)" line 1: Zero byte read from file -make: Fatal errors encountered -- cannot continue -make: stopped in unit-tests -*** Error code 1 (continuing) +*** Error code 2 (continuing) `all' not remade because of errors. Stop. Index: src/usr.bin/make/unit-tests/opt-file.mk diff -u src/usr.bin/make/unit-tests/opt-file.mk:1.15 src/usr.bin/make/unit-tests/opt-file.mk:1.16 --- src/usr.bin/make/unit-tests/opt-file.mk:1.15 Sat Mar 26 13:32:31 2022 +++ src/usr.bin/make/unit-tests/opt-file.mk Mon Apr 1 12:26:02 2024 @@ -1,4 +1,4 @@ -# $NetBSD: opt-file.mk,v 1.15 2022/03/26 13:32:31 rillig Exp $ +# $NetBSD: opt-file.mk,v 1.16 2024/04/01 12:26:02 rillig Exp $ # # Tests for the -f command line option, which adds a makefile to the list of # files that are parsed. @@ -79,7 +79,7 @@ line-with-trailing-whitespace: .PHONY # exit status 0 # # 2008 to 2010: -# make: "zero-byte.in" line 1: Zero byte read from file +# make: "(stdin)" line 1: Zero byte read from file # make: Fatal errors encountered -- cannot continue # # make: stopped in . @@ -92,14 +92,18 @@ line-with-trailing-whitespace: .PHONY # exit status 2 # # 2014 to 2020-12-06: -# make: "zero-byte.in" line 1: warning: Zero byte read from file, skipping rest of line. +# make: "(stdin)" line 1: warning: Zero byte read from file, skipping rest of line. # exit status 0 # # Since 2020-12-07: -# make: "zero-byte.in" line 1: Zero byte read from file +# make: "(stdin)" line 1: Zero byte read from file # make: Fatal errors encountered -- cannot continue # make: stopped in . # exit status 1 +# +# Since 2024-04-01: +# make: "(stdin)" line 1: Zero byte read from file +# *** Error code 2 (continuing) file-containing-null-byte: .PHONY @printf '%s\n' 'VAR=value' 'VAR2=VALUE2' \ | tr 'l' '\0' \