aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2021-06-07 13:46:24 +0000
committerStefan Eßer <se@FreeBSD.org>2021-06-07 13:55:23 +0000
commit35b8fd0b699a20f71d5636069347b243eb336979 (patch)
tree05a86830f14e727bb2fa7374c82bfb9f876956c1
parentdd869341b1e0b58eb50fd2700b3191094d97ef5b (diff)
downloadsrc-35b8fd0b699a20f71d5636069347b243eb336979.tar.gz
src-35b8fd0b699a20f71d5636069347b243eb336979.zip
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
-rw-r--r--usr.bin/calendar/io.c22
-rw-r--r--usr.bin/calendar/tests/calendar.comment3
-rw-r--r--usr.bin/calendar/tests/regress.comment.out2
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/