git: a122c3c49278 - main - unifdef: Fix case where a multiline comment follows a directive.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 19 Jul 2023 14:47:46 UTC
The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=a122c3c49278f8247296fdc1c097129e4862e472 commit a122c3c49278f8247296fdc1c097129e4862e472 Author: Dag-Erling Smørgrav <des@FreeBSD.org> AuthorDate: 2023-07-19 14:25:56 +0000 Commit: Dag-Erling Smørgrav <des@FreeBSD.org> CommitDate: 2023-07-19 14:47:23 +0000 unifdef: Fix case where a multiline comment follows a directive. Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D41026 --- usr.bin/unifdef/tests/Makefile | 1 + usr.bin/unifdef/tests/unifdef_test.sh | 22 ++++++++++++++++++++++ usr.bin/unifdef/unifdef.c | 5 +++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/usr.bin/unifdef/tests/Makefile b/usr.bin/unifdef/tests/Makefile index ddcfbdc6146e..a27c58285c20 100644 --- a/usr.bin/unifdef/tests/Makefile +++ b/usr.bin/unifdef/tests/Makefile @@ -2,6 +2,7 @@ PACKAGE= tests +ATF_TESTS_SH= unifdef_test NETBSD_ATF_TESTS_SH= basic_test ${PACKAGE}FILES+= d_basic.in diff --git a/usr.bin/unifdef/tests/unifdef_test.sh b/usr.bin/unifdef/tests/unifdef_test.sh new file mode 100644 index 000000000000..98adef3adfdc --- /dev/null +++ b/usr.bin/unifdef/tests/unifdef_test.sh @@ -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 +} diff --git a/usr.bin/unifdef/unifdef.c b/usr.bin/unifdef/unifdef.c index d8616016f53d..598c66e3ab06 100644 --- a/usr.bin/unifdef/unifdef.c +++ b/usr.bin/unifdef/unifdef.c @@ -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))