unifdef: Fix case where a multiline comment follows a directive.

Sponsored by:	Klara, Inc.
Reviewed by:	kevans
Differential Revision:	https://reviews.freebsd.org/D41026
This commit is contained in:
Dag-Erling Smørgrav 2023-07-19 14:25:56 +00:00
parent 6f251ef228
commit a122c3c492
3 changed files with 26 additions and 2 deletions

View File

@ -2,6 +2,7 @@
PACKAGE= tests
ATF_TESTS_SH= unifdef_test
NETBSD_ATF_TESTS_SH= basic_test
${PACKAGE}FILES+= d_basic.in

View File

@ -0,0 +1,22 @@
#
# Copyright (c) 2023 Klara, Inc.
#
# SPDX-License-Identifier: BSD-2-Clause
#
atf_test_case hash_comment
hash_comment_head() {
atf_set descr "multiline comment follows directive"
}
hash_comment_body() {
cat >f <<EOF
#if FOO
#endif /*
*/
EOF
atf_check -o file:f unifdef <f
}
atf_init_test_cases() {
atf_add_test_case hash_comment
}

View File

@ -886,8 +886,9 @@ parseline(void)
retval = LT_ELIF;
}
/* the following can happen if the last line of the file lacks a
newline or if there is too much whitespace in a directive */
if (linestate == LS_HASH) {
newline or if there is too much whitespace in a directive,
or if a directive is followed by a multiline comment */
if (linestate == LS_HASH && !incomment) {
long len = cp - tline;
if (fgets(tline + len, MAXLINE - len, input) == NULL) {
if (ferror(input))