summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-01-21 11:35:26 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-01-21 11:35:26 +0000
commit0f8fb91ceac5354f8ffa501261ee7e1237223945 (patch)
treed0df0adf685987ecee522c48310dfafa2d4c9b12 /mdoc.c
parent8c93af8e9eb62eb23b9862156fbb36edd225ed36 (diff)
downloadmandoc-0f8fb91ceac5354f8ffa501261ee7e1237223945.tar.gz
mandoc-0f8fb91ceac5354f8ffa501261ee7e1237223945.tar.zst
mandoc-0f8fb91ceac5354f8ffa501261ee7e1237223945.zip
More validation on prologue/first NAME section.
Diffstat (limited to 'mdoc.c')
-rw-r--r--mdoc.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/mdoc.c b/mdoc.c
index 47be4b04..ccd9e238 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.43 2009/01/20 20:56:21 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.44 2009/01/21 11:35:26 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -305,8 +305,8 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf)
mdoc->linetok = 0;
if ('.' != *buf) {
- if ( ! (MDOC_BODYPARSE & mdoc->flags))
- return(mdoc_perr(mdoc, line, 0, "text disallowed"));
+ if (SEC_PROLOGUE == mdoc->lastnamed)
+ return(mdoc_perr(mdoc, line, 0, "text disallowed in document prologue"));
if ( ! mdoc_word_alloc(mdoc, line, 0, buf))
return(0);
mdoc->next = MDOC_NEXT_SIBLING;
@@ -407,9 +407,12 @@ mdoc_macro(struct mdoc *mdoc, int tok,
assert(mdoc_macros[tok].fp);
- if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) &&
- ! (MDOC_BODYPARSE & mdoc->flags))
- return(mdoc_perr(mdoc, ln, ppos, "macro disallowed: not in document body"));
+ if (MDOC_PROLOGUE & mdoc_macros[tok].flags &&
+ SEC_PROLOGUE != mdoc->lastnamed)
+ return(mdoc_perr(mdoc, ln, ppos, "macro disallowed in document body"));
+ if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) &&
+ SEC_PROLOGUE == mdoc->lastnamed)
+ return(mdoc_perr(mdoc, ln, ppos, "macro disallowed in document prologue"));
if (1 != ppos && ! (MDOC_CALLABLE & mdoc_macros[tok].flags))
return(mdoc_perr(mdoc, ln, ppos, "macro not callable"));
return((*mdoc_macros[tok].fp)(mdoc, tok, ln, ppos, pos, buf));