aboutsummaryrefslogtreecommitdiffstatshomepage
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
commitdcf99dab6ac9d82bc6581c4ea0ea85bc4a98736e (patch)
treea762d2223de02519b8eed859c376b841ef562f1e
parentec4aa33aa49344c12ff324f27bb68a147a21623e (diff)
downloadmandoc-dcf99dab6ac9d82bc6581c4ea0ea85bc4a98736e.tar.gz
mandoc-dcf99dab6ac9d82bc6581c4ea0ea85bc4a98736e.tar.zst
mandoc-dcf99dab6ac9d82bc6581c4ea0ea85bc4a98736e.zip
warn about time machines; suggested by Thomas Klausner <wiz @ NetBSD>
-rw-r--r--mandoc.112
-rw-r--r--mandoc.c14
-rw-r--r--mandoc.h3
-rw-r--r--read.c3
4 files changed, 25 insertions, 7 deletions
diff --git a/mandoc.1 b/mandoc.1
index 4189002c..09c68895 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.211 2017/07/02 15:31:59 schwarze Exp $
+.\" $Id: mandoc.1,v 1.212 2017/07/03 13:40:18 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: July 2 2017 $
+.Dd $Mdocdate: July 3 2017 $
.Dt MANDOC 1
.Os
.Sh NAME
@@ -981,6 +981,14 @@ The date given in a
or
.Ic \&TH
macro does not follow the conventional format.
+.It Sy "date in the future, using it anyway"
+.Pq mdoc , man
+The date given in a
+.Ic \&Dd
+or
+.Ic \&TH
+macro is more than a day ahead of the current system
+.Xr time 3 .
.It Sy "missing Os macro, using \(dq\(dq"
.Pq mdoc
The default or current system is not shown in this case.
diff --git a/mandoc.c b/mandoc.c
index 5b541fa4..3e16d2c6 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,4 +1,4 @@
-/* $Id: mandoc.c,v 1.102 2017/06/14 01:31:26 schwarze Exp $ */
+/* $Id: mandoc.c,v 1.103 2017/07/03 13:40:19 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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);
diff --git a/mandoc.h b/mandoc.h
index 41bb2aa6..ecc8eda0 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.239 2017/07/02 15:31:59 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.240 2017/07/03 13:40:19 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -76,6 +76,7 @@ enum mandocerr {
MANDOCERR_MSEC_BAD, /* unknown manual section: Dt ... section */
MANDOCERR_DATE_MISSING, /* missing date, using today's date */
MANDOCERR_DATE_BAD, /* cannot parse date, using it verbatim: date */
+ MANDOCERR_DATE_FUTURE, /* date in the future, using it anyway: date */
MANDOCERR_OS_MISSING, /* missing Os macro, using "" */
MANDOCERR_PROLOG_REP, /* duplicate prologue macro: macro */
MANDOCERR_PROLOG_LATE, /* late prologue macro: macro */
diff --git a/read.c b/read.c
index 8fc671b0..e0ca9ea0 100644
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.185 2017/07/02 15:31:59 schwarze Exp $ */
+/* $Id: read.c,v 1.186 2017/07/03 13:40:19 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -118,6 +118,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"unknown manual section",
"missing date, using today's date",
"cannot parse date, using it verbatim",
+ "date in the future, using it anyway",
"missing Os macro, using \"\"",
"duplicate prologue macro",
"late prologue macro",