Module Name: src Committed By: rillig Date: Tue Dec 22 08:05:08 UTC 2020
Modified Files: src/usr.bin/make: parse.c src/usr.bin/make/unit-tests: opt-file.exp opt-file.mk Log Message: make(1): fix assertion failure for files without trailing newline Previously, mmapped files didn't always have the final newline added. Only those that ended at a page boundary did. This confused ParseRawLine, which assumed (and since parse.c 1.510 from moments ago also asserted) that every line ends with a newline, which allows the code to assume that after a backslash, there is at least one other character in the buffer, thereby preventing an out-of-bounds read. This bug had been there at least since parse.c 1.170 from 2010-12-25 04:57:07, maybe even earlier, I didn't check. Now line_end always points to the trailing newline, which allows ParseGetLine to overwrite that character to end the string. To generate a diff of this commit: cvs rdiff -u -r1.510 -r1.511 src/usr.bin/make/parse.c cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/opt-file.exp cvs rdiff -u -r1.7 -r1.8 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.