summaryrefslogtreecommitdiffstats
path: root/usr.bin/mandoc/mdoc_validate.c
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2017-01-08 00:10:22 +0000
committerschwarze <schwarze@openbsd.org>2017-01-08 00:10:22 +0000
commitf27faacc13af7c108cb64e7d02bccedf5236d4c3 (patch)
treee4b6b8da667eafbcbcee0f611307a2ee6ea8dd95 /usr.bin/mandoc/mdoc_validate.c
parentMake getting the parent clock for the SD/MMC controller work on the (diff)
downloadwireguard-openbsd-f27faacc13af7c108cb64e7d02bccedf5236d4c3.tar.xz
wireguard-openbsd-f27faacc13af7c108cb64e7d02bccedf5236d4c3.zip
Stricter validation of the NAME section, in particular:
- require a comma between names - reject all other text nodes - reject all empty Nm below NAME, not only in the leading position - reject Nm after Nd
Diffstat (limited to 'usr.bin/mandoc/mdoc_validate.c')
-rw-r--r--usr.bin/mandoc/mdoc_validate.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/usr.bin/mandoc/mdoc_validate.c b/usr.bin/mandoc/mdoc_validate.c
index bbfc3b9cdfe..1f499cbfa87 100644
--- a/usr.bin/mandoc/mdoc_validate.c
+++ b/usr.bin/mandoc/mdoc_validate.c
@@ -1,7 +1,7 @@
-/* $OpenBSD: mdoc_validate.c,v 1.226 2016/12/28 17:21:17 schwarze Exp $ */
+/* $OpenBSD: mdoc_validate.c,v 1.227 2017/01/08 00:10:22 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -842,12 +842,11 @@ post_nm(POST_ARGS)
n->last->tok == MDOC_Lp))
mdoc_node_relink(mdoc, n->last);
- if (mdoc->meta.name != NULL)
- return;
-
- deroff(&mdoc->meta.name, n);
-
if (mdoc->meta.name == NULL)
+ deroff(&mdoc->meta.name, n);
+
+ if (mdoc->meta.name == NULL ||
+ (mdoc->lastsec == SEC_NAME && n->child == NULL))
mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse,
n->line, n->pos, "Nm");
}
@@ -1589,8 +1588,12 @@ post_sh_name(POST_ARGS)
for (n = mdoc->last->child; n != NULL; n = n->next) {
switch (n->tok) {
case MDOC_Nm:
+ if (hasnm && n->child != NULL)
+ mandoc_vmsg(MANDOCERR_NAMESEC_PUNCT,
+ mdoc->parse, n->line, n->pos,
+ "Nm %s", n->child->string);
hasnm = 1;
- break;
+ continue;
case MDOC_Nd:
hasnd = 1;
if (n->next != NULL)
@@ -1598,14 +1601,19 @@ post_sh_name(POST_ARGS)
mdoc->parse, n->line, n->pos, NULL);
break;
case TOKEN_NONE:
- if (hasnm)
- break;
+ if (n->type == ROFFT_TEXT &&
+ n->string[0] == ',' && n->string[1] == '\0' &&
+ n->next != NULL && n->next->tok == MDOC_Nm) {
+ n = n->next;
+ continue;
+ }
/* FALLTHROUGH */
default:
mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse,
n->line, n->pos, mdoc_macronames[n->tok]);
- break;
+ continue;
}
+ break;
}
if ( ! hasnm)