diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-04-15 00:41:09 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-04-15 00:41:09 +0000 |
commit | d261dfa94ff4ab757aca23ebaeeb5112a571f0b1 (patch) | |
tree | 83737bb123fc0457abe047f15d1b2b98826c0b52 /mdoc_validate.c | |
parent | 1f64ec4845827384e677e18f5e6fbeb68822741f (diff) | |
download | mandoc-d261dfa94ff4ab757aca23ebaeeb5112a571f0b1.tar.gz |
Using macros in .Sh header lines, or having .Sm off or .Bk -words open
while processing .Sh, is not at all recommended, but it's not strictly
a syntax violation either, and in any case, mandoc must not die in an
assertion. I broke this in rev. 1.124.
Crash found while trying to read the (rather broken) original 4.3BSD-Reno
od(1) manual page.
Diffstat (limited to 'mdoc_validate.c')
-rw-r--r-- | mdoc_validate.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c index 6f78f7b2..fc0b6e18 100644 --- a/mdoc_validate.c +++ b/mdoc_validate.c @@ -1950,7 +1950,7 @@ static int post_sh_head(POST_ARGS) { struct mdoc_node *n; - const char *secname; + char *secname; enum mdoc_sec sec; /* @@ -1962,15 +1962,8 @@ post_sh_head(POST_ARGS) secname = NULL; sec = SEC_CUSTOM; - n = mdoc->last; - if (n->child) { - assert(1 == n->nchild); - n = n->child; - assert(NULL != n); - assert(MDOC_TEXT == n->type); - secname = n->string; - sec = a2sec(secname); - } + mdoc_deroff(&secname, mdoc->last); + sec = NULL == secname ? SEC_CUSTOM : a2sec(secname); /* The NAME should be first. */ @@ -2007,8 +2000,10 @@ post_sh_head(POST_ARGS) /* We don't care about custom sections after this. */ - if (SEC_CUSTOM == sec) + if (SEC_CUSTOM == sec) { + free(secname); return(1); + } /* * Check whether our non-custom section is being repeated or is @@ -2052,6 +2047,7 @@ post_sh_head(POST_ARGS) break; } + free(secname); return(1); } |