aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2016-08-17 20:46:56 +0000
committerIngo Schwarze <schwarze@openbsd.org>2016-08-17 20:46:56 +0000
commitcddabf4481def808a91c9b24836ff80880d10594 (patch)
treed88818c33a80dd1f73ed529d56f2d377b63cd2c5
parent58f7533c9f4a757e9db71039330750a0b958f008 (diff)
downloadmandoc-cddabf4481def808a91c9b24836ff80880d10594.tar.gz
mandoc-cddabf4481def808a91c9b24836ff80880d10594.tar.zst
mandoc-cddabf4481def808a91c9b24836ff80880d10594.zip
When the content of a manual page does not specify a section, the
empty string got added to the list of sections, breaking the database format slightly and causing the page to not be considered part of any section, not even if a section could be deduced from the directory or from the file name. Bug found due to the bogus pcredemo(3) "manual" in the pcre-8.38p0 package.
-rw-r--r--dba.c9
-rw-r--r--dba.h5
-rw-r--r--dba_read.c9
-rw-r--r--mandocdb.c5
4 files changed, 12 insertions, 16 deletions
diff --git a/dba.c b/dba.c
index b414c436..1f2d21c4 100644
--- a/dba.c
+++ b/dba.c
@@ -1,4 +1,4 @@
-/* $Id: dba.c,v 1.7 2016/08/17 18:59:37 schwarze Exp $ */
+/* $Id: dba.c,v 1.8 2016/08/17 20:46:56 schwarze Exp $ */
/*
* Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -136,18 +136,15 @@ dba_write(const char *fname, struct dba *dba)
* Create a new page and append it to the pages table.
*/
struct dba_array *
-dba_page_new(struct dba_array *pages, const char *name, const char *sect,
- const char *arch, const char *desc, const char *file, enum form form)
+dba_page_new(struct dba_array *pages, const char *arch,
+ const char *desc, const char *file, enum form form)
{
struct dba_array *page, *entry;
page = dba_array_new(DBP_MAX, 0);
entry = dba_array_new(1, DBA_STR | DBA_GROW);
- if (name != NULL)
- dba_array_add(entry, prepend(name, NAME_FILE & NAME_MASK));
dba_array_add(page, entry);
entry = dba_array_new(1, DBA_STR | DBA_GROW);
- dba_array_add(entry, (void *)sect);
dba_array_add(page, entry);
if (arch != NULL && *arch != '\0') {
entry = dba_array_new(1, DBA_STR | DBA_GROW);
diff --git a/dba.h b/dba.h
index 6715472d..67a2759a 100644
--- a/dba.h
+++ b/dba.h
@@ -1,4 +1,4 @@
-/* $Id: dba.h,v 1.1 2016/07/19 21:31:55 schwarze Exp $ */
+/* $Id: dba.h,v 1.2 2016/08/17 20:46:56 schwarze Exp $ */
/*
* Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -40,8 +40,7 @@ struct dba *dba_read(const char *);
int dba_write(const char *, struct dba *);
struct dba_array *dba_page_new(struct dba_array *, const char *,
- const char *, const char *, const char *,
- const char *, enum form);
+ const char *, const char *, enum form);
void dba_page_add(struct dba_array *, int32_t, const char *);
void dba_page_alias(struct dba_array *, const char *, uint64_t);
diff --git a/dba_read.c b/dba_read.c
index b24bd2e7..e9760570 100644
--- a/dba_read.c
+++ b/dba_read.c
@@ -1,4 +1,4 @@
-/* $Id: dba_read.c,v 1.3 2016/08/17 18:59:37 schwarze Exp $ */
+/* $Id: dba_read.c,v 1.4 2016/08/17 20:46:56 schwarze Exp $ */
/*
* Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -48,12 +48,11 @@ dba_read(const char *fname)
dba = dba_new(npages < 128 ? 128 : npages);
for (ip = 0; ip < npages; ip++) {
pdata = dbm_page_get(ip);
- page = dba_page_new(dba->pages, NULL, pdata->sect,
- pdata->arch, pdata->desc, pdata->file + 1, *pdata->file);
+ page = dba_page_new(dba->pages, pdata->arch,
+ pdata->desc, pdata->file + 1, *pdata->file);
for (cp = pdata->name; *cp != '\0'; cp = strchr(cp, '\0') + 1)
dba_page_add(page, DBP_NAME, cp);
- cp = pdata->sect;
- while (*(cp = strchr(cp, '\0') + 1) != '\0')
+ for (cp = pdata->sect; *cp != '\0'; cp = strchr(cp, '\0') + 1)
dba_page_add(page, DBP_SECT, cp);
if ((cp = pdata->arch) != NULL)
while (*(cp = strchr(cp, '\0') + 1) != '\0')
diff --git a/mandocdb.c b/mandocdb.c
index 00773a58..f16652d5 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.226 2016/08/05 17:22:45 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.227 2016/08/17 20:46:56 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2016 Ingo Schwarze <schwarze@openbsd.org>
@@ -2013,11 +2013,12 @@ dbadd(struct dba *dba, struct mpage *mpage)
cp = mpage->desc;
i = strlen(cp);
mustfree = render_string(&cp, &i);
- mpage->dba = dba_page_new(dba->pages, mlink->name, mpage->sec,
+ mpage->dba = dba_page_new(dba->pages,
*mpage->arch == '\0' ? mlink->arch : mpage->arch,
cp, mlink->file, mpage->form);
if (mustfree)
free(cp);
+ dba_page_add(mpage->dba, DBP_SECT, mpage->sec);
while (mlink != NULL) {
dbadd_mlink(mlink);