summaryrefslogtreecommitdiff
path: root/usr.bin/calendar
diff options
context:
space:
mode:
authorStefan Eßer <se@FreeBSD.org>2020-11-03 11:37:19 +0000
committerStefan Eßer <se@FreeBSD.org>2020-11-03 11:37:19 +0000
commitcc9fbfafbe6bc8ec848c40cd5bb3887529329bb9 (patch)
treecd788d756c81482d84ee98641887852e910608a1 /usr.bin/calendar
parent0cadbd6cd258e2a889c49f42d3f61f85663eeb75 (diff)
downloadsrc-test2-cc9fbfafbe6bc8ec848c40cd5bb3887529329bb9.tar.gz
src-test2-cc9fbfafbe6bc8ec848c40cd5bb3887529329bb9.zip
Notes
Diffstat (limited to 'usr.bin/calendar')
-rw-r--r--usr.bin/calendar/io.c51
1 files changed, 38 insertions, 13 deletions
diff --git a/usr.bin/calendar/io.c b/usr.bin/calendar/io.c
index 3c9024b1d103..be5d232bcd62 100644
--- a/usr.bin/calendar/io.c
+++ b/usr.bin/calendar/io.c
@@ -89,22 +89,29 @@ static StringList *definitions = NULL;
static struct event *events[MAXCOUNT];
static char *extradata[MAXCOUNT];
-static void
+static char *
trimlr(char **buf)
{
char *walk = *buf;
+ char *sep;
char *last;
while (isspace(*walk))
walk++;
- if (*walk != '\0') {
- last = walk + strlen(walk) - 1;
+ *buf = walk;
+
+ sep = walk;
+ while (*sep != '\0' && !isspace(*sep))
+ sep++;
+
+ if (*sep != '\0') {
+ last = sep + strlen(sep) - 1;
while (last > walk && isspace(*last))
last--;
*(last+1) = 0;
}
- *buf = walk;
+ return (sep);
}
static FILE *
@@ -167,7 +174,7 @@ cal_path(void)
static int
token(char *line, FILE *out, int *skip, int *unskip)
{
- char *walk, c, a;
+ char *walk, *sep, a, c;
const char *this_cal_home;
const char *this_cal_dir;
const char *this_cal_file;
@@ -188,14 +195,20 @@ token(char *line, FILE *out, int *skip, int *unskip)
if (strncmp(line, "ifdef", 5) == 0) {
walk = line + 5;
- trimlr(&walk);
+ sep = trimlr(&walk);
if (*walk == '\0') {
WARN0("Expecting arguments after #ifdef");
return (T_ERR);
}
+ if (*sep != '\0') {
+ WARN1("Expecting a single word after #ifdef "
+ "but got \"%s\"", walk);
+ return (T_ERR);
+ }
- if (*skip != 0 || definitions == NULL || sl_find(definitions, walk) == NULL)
+ if (*skip != 0 ||
+ definitions == NULL || sl_find(definitions, walk) == NULL)
++*skip;
else
++*unskip;
@@ -205,14 +218,20 @@ token(char *line, FILE *out, int *skip, int *unskip)
if (strncmp(line, "ifndef", 6) == 0) {
walk = line + 6;
- trimlr(&walk);
+ sep = trimlr(&walk);
if (*walk == '\0') {
WARN0("Expecting arguments after #ifndef");
return (T_ERR);
}
+ if (*sep != '\0') {
+ WARN1("Expecting a single word after #ifndef "
+ "but got \"%s\"", walk);
+ return (T_ERR);
+ }
- if (*skip != 0 || (definitions != NULL && sl_find(definitions, walk) != NULL))
+ if (*skip != 0 ||
+ (definitions != NULL && sl_find(definitions, walk) != NULL))
++*skip;
else
++*unskip;
@@ -222,7 +241,7 @@ token(char *line, FILE *out, int *skip, int *unskip)
if (strncmp(line, "else", 4) == 0) {
walk = line + 4;
- trimlr(&walk);
+ (void)trimlr(&walk);
if (*walk != '\0') {
WARN0("Expecting no arguments after #else");
@@ -251,7 +270,7 @@ token(char *line, FILE *out, int *skip, int *unskip)
if (strncmp(line, "include", 7) == 0) {
walk = line + 7;
- trimlr(&walk);
+ (void)trimlr(&walk);
if (*walk == '\0') {
WARN0("Expecting arguments after #include");
@@ -291,7 +310,8 @@ token(char *line, FILE *out, int *skip, int *unskip)
if (definitions == NULL)
definitions = sl_init();
walk = line + 6;
- trimlr(&walk);
+ sep = trimlr(&walk);
+ *sep = '\0';
if (*walk == '\0') {
WARN0("Expecting arguments after #define");
@@ -306,12 +326,17 @@ token(char *line, FILE *out, int *skip, int *unskip)
if (strncmp(line, "undef", 5) == 0) {
if (definitions != NULL) {
walk = line + 5;
- trimlr(&walk);
+ sep = trimlr(&walk);
if (*walk == '\0') {
WARN0("Expecting arguments after #undef");
return (T_ERR);
}
+ if (*sep != '\0') {
+ WARN1("Expecting a single word after #undef "
+ "but got \"%s\"", walk);
+ return (T_ERR);
+ }
walk = sl_find(definitions, walk);
if (walk != NULL)