summaryrefslogtreecommitdiffstats
path: root/mandoc.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-07-03 13:40:18 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-07-03 13:40:18 +0000
commit7e3f3a2b83bdaf6b8929d44bacefb12730122d72 (patch)
tree4a9b9f72b3ff11e3a1fd84ad2c448db55af1d26e /mandoc.c
parentc3e510863e8794c67068a3e8afc61d9af760144f (diff)
downloadmandoc-7e3f3a2b83bdaf6b8929d44bacefb12730122d72.tar.gz
warn about time machines; suggested by Thomas Klausner <wiz @ NetBSD>
Diffstat (limited to 'mandoc.c')
-rw-r--r--mandoc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/mandoc.c b/mandoc.c
index 7dfeec77..44ad938d 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -523,6 +523,7 @@ fail:
char *
mandoc_normdate(struct roff_man *man, char *in, int ln, int pos)
{
+ char *cp;
time_t t;
/* No date specified: use today's date. */
@@ -535,13 +536,20 @@ mandoc_normdate(struct roff_man *man, char *in, int ln, int pos)
/* Valid mdoc(7) date format. */
if (a2time(&t, "$" "Mdocdate: %b %d %Y $", in) ||
- a2time(&t, "%b %d, %Y", in))
- return time2a(t);
+ a2time(&t, "%b %d, %Y", in)) {
+ cp = time2a(t);
+ if (t > time(NULL) + 86400)
+ mandoc_msg(MANDOCERR_DATE_FUTURE, man->parse,
+ ln, pos, cp);
+ return cp;
+ }
/* In man(7), do not warn about the legacy format. */
if (a2time(&t, "%Y-%m-%d", in) == 0)
mandoc_msg(MANDOCERR_DATE_BAD, man->parse, ln, pos, in);
+ else if (t > time(NULL) + 86400)
+ mandoc_msg(MANDOCERR_DATE_FUTURE, man->parse, ln, pos, in);
else if (man->macroset == MACROSET_MDOC)
mandoc_vmsg(MANDOCERR_DATE_LEGACY, man->parse,
ln, pos, "Dd %s", in);