Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Jun 2021 13:55:48 GMT
From:      =?utf-8?B?U3RlZmFuIEXDn2Vy?= <se@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 35b8fd0b699a - main - usr.bin/calendar: do not treat // in text as comment
Message-ID:  <202106071355.157DtmJ0091791@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by se:

URL: https://cgit.FreeBSD.org/src/commit/?id=35b8fd0b699a20f71d5636069347b243eb336979

commit 35b8fd0b699a20f71d5636069347b243eb336979
Author:     Stefan Eßer <se@FreeBSD.org>
AuthorDate: 2021-06-07 13:46:24 +0000
Commit:     Stefan Eßer <se@FreeBSD.org>
CommitDate: 2021-06-07 13:55:23 +0000

    usr.bin/calendar: do not treat // in text as comment
    
    The C++-style comment marker "//" has been added with the rewrite of
    the preprocessor features. Since this character sequence occurs in
    ULRS, the reminder of the URL was considered a comment and stripped
    from the calendar line.
    
    Change parsing of "//" to only start a comment at the begin of a line
    or when preceeded by a white-space character.
    
    PR:             256455
    Reported by:    Philippe Michel (philippe.michel7 at free.fr)
    MFC after:      3 days
---
 usr.bin/calendar/io.c                      | 22 ++++++++++++++--------
 usr.bin/calendar/tests/calendar.comment    |  3 ++-
 usr.bin/calendar/tests/regress.comment.out |  2 ++
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/usr.bin/calendar/io.c b/usr.bin/calendar/io.c
index 24966399c179..5afcb1a33314 100644
--- a/usr.bin/calendar/io.c
+++ b/usr.bin/calendar/io.c
@@ -405,7 +405,7 @@ cal_parse(FILE *in, FILE *out)
 {
 	char *mylocale = NULL;
 	char *line = NULL;
-	char *buf;
+	char *buf, *bufp;
 	size_t linecap = 0;
 	ssize_t linelen;
 	ssize_t l;
@@ -443,21 +443,27 @@ cal_parse(FILE *in, FILE *out)
 			}
 		}
 		if (!incomment) {
+			bufp = buf;
 			do {
-				c = strstr(buf, "//");
-				cc = strstr(buf, "/*");
+				c = strstr(bufp, "//");
+				cc = strstr(bufp, "/*");
 				if (c != NULL && (cc == NULL || c - cc < 0)) {
-					/* single line comment */
-					*c = '\0';
-					linelen = c - buf;
-					break;
+					bufp = c + 2;
+					/* ignore "//" within string to allow it in an URL */
+					if (c == buf || isspace(c[-1])) {
+						/* single line comment */
+						*c = '\0';
+						linelen = c - buf;
+						break;
+					}
 				} else if (cc != NULL) {
 					c = strstr(cc + 2, "*/");
-					if (c != NULL) {
+					if (c != NULL) { // 'a /* b */ c' -- cc=2, c=7+2
 						/* multi-line comment ending on same line */
 						c += 2;
 						memmove(cc, c, buf + linelen + 1 - c);
 						linelen -= c - cc;
+						bufp = cc;
 					} else {
 						/* multi-line comment */
 						*cc = '\0';
diff --git a/usr.bin/calendar/tests/calendar.comment b/usr.bin/calendar/tests/calendar.comment
index 6af037ec7e9d..837e5af9e89e 100644
--- a/usr.bin/calendar/tests/calendar.comment
+++ b/usr.bin/calendar/tests/calendar.comment
@@ -7,4 +7,5 @@
 1/* comment */ 6	jan 6
 1 7	jan 7 // /* comment */ comment
 1 1/* comment */1	jan /* comment */11 // comment
-
+1 12	http://localhost.local/
+1 13	http://localhost.local/ // URL with additional comment
diff --git a/usr.bin/calendar/tests/regress.comment.out b/usr.bin/calendar/tests/regress.comment.out
index 1ba3d8cc640e..fb58fd29ff05 100644
--- a/usr.bin/calendar/tests/regress.comment.out
+++ b/usr.bin/calendar/tests/regress.comment.out
@@ -6,3 +6,5 @@ Jan  5 	jan 5
 Jan  6 	jan 6
 Jan  7 	jan 7
 Jan 11 	jan 11
+Jan 12 	http://localhost.local/
+Jan 13 	http://localhost.local/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106071355.157DtmJ0091791>