Import mandoc 1.14.3
MFC after: 1 week
This commit is contained in:
commit
1e515e9434
@ -15,7 +15,7 @@
|
|||||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
VERSION = 1.14.2
|
VERSION = 1.14.3
|
||||||
|
|
||||||
# === LIST OF FILES ====================================================
|
# === LIST OF FILES ====================================================
|
||||||
|
|
||||||
|
@ -2,6 +2,21 @@ $Id: NEWS,v 1.26 2017/07/28 14:57:56 schwarze Exp $
|
|||||||
|
|
||||||
This file lists the most important changes in the mandoc.bsd.lv distribution.
|
This file lists the most important changes in the mandoc.bsd.lv distribution.
|
||||||
|
|
||||||
|
Changes in version 1.14.3, released on August 5, 2017
|
||||||
|
|
||||||
|
--- BUG FIXES ---
|
||||||
|
* man(7): Do not crash with out-of-bounds read access to a constant
|
||||||
|
array if .sp or a blank line immediately precedes .SS or .SH.
|
||||||
|
* mdoc(7): Do not crash with out-of-bounds read access to a constant
|
||||||
|
array if .sp or a blank line precede the first .Sh macro.
|
||||||
|
* tbl(7): Ignore explicitly specified negative column widths rather than
|
||||||
|
wrapping around to huge numbers and risking memory exhaustion.
|
||||||
|
* man(1): No longer use names that only occur in the SYNOPSIS section.
|
||||||
|
Gets rid of some surprising behaviour and bogus warnings.
|
||||||
|
--- THANKS TO ---
|
||||||
|
Leah Neukirchen (Void Linux), Markus Waldeck (Debian),
|
||||||
|
Peter Bui (nd.edu), and Yuri Pankov (illumos) for bug reports.
|
||||||
|
|
||||||
Changes in version 1.14.2, released on July 28, 2017
|
Changes in version 1.14.2, released on July 28, 2017
|
||||||
|
|
||||||
--- MAJOR NEW FEATURES ---
|
--- MAJOR NEW FEATURES ---
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: man_term.c,v 1.208 2017/06/25 11:42:02 schwarze Exp $ */
|
/* $Id: man_term.c,v 1.209 2017/07/31 15:19:06 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -673,7 +673,7 @@ pre_SS(DECL_ARGS)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
n = n->prev;
|
n = n->prev;
|
||||||
} while (n != NULL && n->tok != TOKEN_NONE &&
|
} while (n != NULL && n->tok >= MAN_TH &&
|
||||||
termacts[n->tok].flags & MAN_NOTEXT);
|
termacts[n->tok].flags & MAN_NOTEXT);
|
||||||
if (n == NULL || (n->tok == MAN_SS && n->body->child == NULL))
|
if (n == NULL || (n->tok == MAN_SS && n->body->child == NULL))
|
||||||
break;
|
break;
|
||||||
@ -735,7 +735,7 @@ pre_SH(DECL_ARGS)
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
n = n->prev;
|
n = n->prev;
|
||||||
} while (n != NULL && n->tok != TOKEN_NONE &&
|
} while (n != NULL && n->tok >= MAN_TH &&
|
||||||
termacts[n->tok].flags & MAN_NOTEXT);
|
termacts[n->tok].flags & MAN_NOTEXT);
|
||||||
if (n == NULL || (n->tok == MAN_SH && n->body->child == NULL))
|
if (n == NULL || (n->tok == MAN_SH && n->body->child == NULL))
|
||||||
break;
|
break;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: mansearch.c,v 1.50 2016/07/09 15:23:36 schwarze Exp $ */
|
/* $Id: mansearch.c,v 1.76 2017/08/02 13:29:04 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2013-2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -171,7 +171,9 @@ mansearch(const struct mansearch *search,
|
|||||||
page = dbm_page_get(rp->page);
|
page = dbm_page_get(rp->page);
|
||||||
|
|
||||||
if (lstmatch(search->sec, page->sect) == 0 ||
|
if (lstmatch(search->sec, page->sect) == 0 ||
|
||||||
lstmatch(search->arch, page->arch) == 0)
|
lstmatch(search->arch, page->arch) == 0 ||
|
||||||
|
(search->argmode == ARG_NAME &&
|
||||||
|
rp->bits <= (int32_t)(NAME_SYN & NAME_MASK)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (res == NULL) {
|
if (res == NULL) {
|
||||||
@ -452,14 +454,28 @@ lstlen(const char *cp, size_t sep)
|
|||||||
{
|
{
|
||||||
size_t sz;
|
size_t sz;
|
||||||
|
|
||||||
for (sz = 0;; sz++) {
|
for (sz = 0; *cp != '\0'; cp++) {
|
||||||
if (cp[0] == '\0') {
|
|
||||||
if (cp[1] == '\0')
|
/* Skip names appearing only in the SYNOPSIS. */
|
||||||
break;
|
if (*cp <= (char)(NAME_SYN & NAME_MASK)) {
|
||||||
sz += sep - 1;
|
while (*cp != '\0')
|
||||||
} else if (cp[0] < ' ')
|
cp++;
|
||||||
sz--;
|
continue;
|
||||||
cp++;
|
}
|
||||||
|
|
||||||
|
/* Skip name class markers. */
|
||||||
|
if (*cp < ' ')
|
||||||
|
cp++;
|
||||||
|
|
||||||
|
/* Print a separator before each but the first string. */
|
||||||
|
if (sz)
|
||||||
|
sz += sep;
|
||||||
|
|
||||||
|
/* Copy one string. */
|
||||||
|
while (*cp != '\0') {
|
||||||
|
sz++;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sz;
|
return sz;
|
||||||
}
|
}
|
||||||
@ -471,19 +487,34 @@ lstlen(const char *cp, size_t sep)
|
|||||||
static void
|
static void
|
||||||
lstcat(char *buf, size_t *i, const char *cp, const char *sep)
|
lstcat(char *buf, size_t *i, const char *cp, const char *sep)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
|
size_t i_start;
|
||||||
|
|
||||||
for (;;) {
|
for (i_start = *i; *cp != '\0'; cp++) {
|
||||||
if (cp[0] == '\0') {
|
|
||||||
if (cp[1] == '\0')
|
/* Skip names appearing only in the SYNOPSIS. */
|
||||||
break;
|
if (*cp <= (char)(NAME_SYN & NAME_MASK)) {
|
||||||
|
while (*cp != '\0')
|
||||||
|
cp++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skip name class markers. */
|
||||||
|
if (*cp < ' ')
|
||||||
|
cp++;
|
||||||
|
|
||||||
|
/* Print a separator before each but the first string. */
|
||||||
|
if (*i > i_start) {
|
||||||
s = sep;
|
s = sep;
|
||||||
while (*s != '\0')
|
while (*s != '\0')
|
||||||
buf[(*i)++] = *s++;
|
buf[(*i)++] = *s++;
|
||||||
} else if (cp[0] >= ' ')
|
}
|
||||||
buf[(*i)++] = cp[0];
|
|
||||||
cp++;
|
/* Copy one string. */
|
||||||
|
while (*cp != '\0')
|
||||||
|
buf[(*i)++] = *cp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: mdoc_validate.c,v 1.350 2017/07/20 12:54:02 schwarze Exp $ */
|
/* $Id: mdoc_validate.c,v 1.352 2017/08/02 13:29:04 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -1137,8 +1137,6 @@ post_fname(POST_ARGS)
|
|||||||
if ( ! (cp[0] == '\0' || (cp[0] == '(' && cp[1] == '*')))
|
if ( ! (cp[0] == '\0' || (cp[0] == '(' && cp[1] == '*')))
|
||||||
mandoc_msg(MANDOCERR_FN_PAREN, mdoc->parse,
|
mandoc_msg(MANDOCERR_FN_PAREN, mdoc->parse,
|
||||||
n->line, n->pos + pos, n->string);
|
n->line, n->pos + pos, n->string);
|
||||||
if (n->sec == SEC_SYNOPSIS && mdoc->meta.msec != NULL)
|
|
||||||
mandoc_xr_add(mdoc->meta.msec, n->string, -1, -1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1205,9 +1203,8 @@ post_nm(POST_ARGS)
|
|||||||
|
|
||||||
n = mdoc->last;
|
n = mdoc->last;
|
||||||
|
|
||||||
if ((n->sec == SEC_NAME || n->sec == SEC_SYNOPSIS) &&
|
if (n->sec == SEC_NAME && n->child != NULL &&
|
||||||
n->child != NULL && n->child->type == ROFFT_TEXT &&
|
n->child->type == ROFFT_TEXT && mdoc->meta.msec != NULL)
|
||||||
mdoc->meta.msec != NULL)
|
|
||||||
mandoc_xr_add(mdoc->meta.msec, n->child->string, -1, -1);
|
mandoc_xr_add(mdoc->meta.msec, n->child->string, -1, -1);
|
||||||
|
|
||||||
if (n->last != NULL &&
|
if (n->last != NULL &&
|
||||||
@ -1931,7 +1928,7 @@ post_root(POST_ARGS)
|
|||||||
/* Check that we begin with a proper `Sh'. */
|
/* Check that we begin with a proper `Sh'. */
|
||||||
|
|
||||||
n = mdoc->first->child;
|
n = mdoc->first->child;
|
||||||
while (n != NULL && n->tok != TOKEN_NONE &&
|
while (n != NULL && n->tok >= MDOC_Dd &&
|
||||||
mdoc_macros[n->tok].flags & MDOC_PROLOGUE)
|
mdoc_macros[n->tok].flags & MDOC_PROLOGUE)
|
||||||
n = n->next;
|
n = n->next;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tbl_html.c,v 1.22 2017/06/12 20:14:18 schwarze Exp $ */
|
/* $Id: tbl_html.c,v 1.23 2017/07/31 16:14:10 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -49,6 +49,9 @@ html_tbl_strlen(const char *p, void *arg)
|
|||||||
static size_t
|
static size_t
|
||||||
html_tbl_sulen(const struct roffsu *su, void *arg)
|
html_tbl_sulen(const struct roffsu *su, void *arg)
|
||||||
{
|
{
|
||||||
|
if (su->scale < 0.0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
switch (su->unit) {
|
switch (su->unit) {
|
||||||
case SCALE_FS: /* 2^16 basic units */
|
case SCALE_FS: /* 2^16 basic units */
|
||||||
return su->scale * 65536.0 / 24.0;
|
return su->scale * 65536.0 / 24.0;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tbl_term.c,v 1.56 2017/07/08 13:43:15 schwarze Exp $ */
|
/* $Id: tbl_term.c,v 1.57 2017/07/31 16:14:10 schwarze Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
* Copyright (c) 2011,2012,2014,2015,2017 Ingo Schwarze <schwarze@openbsd.org>
|
* Copyright (c) 2011,2012,2014,2015,2017 Ingo Schwarze <schwarze@openbsd.org>
|
||||||
@ -51,7 +51,10 @@ static void tbl_word(struct termp *, const struct tbl_dat *);
|
|||||||
static size_t
|
static size_t
|
||||||
term_tbl_sulen(const struct roffsu *su, void *arg)
|
term_tbl_sulen(const struct roffsu *su, void *arg)
|
||||||
{
|
{
|
||||||
return term_hen((const struct termp *)arg, su);
|
int i;
|
||||||
|
|
||||||
|
i = term_hen((const struct termp *)arg, su);
|
||||||
|
return i > 0 ? i : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
|
Loading…
Reference in New Issue
Block a user