diff options
author | Peter Schiffer <pschiffe@redhat.com> | 2014-01-15 12:09:43 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2014-01-15 12:13:07 +0000 |
commit | 5bb7ba28ae3b1ca907f399f45a5f48a371584011 (patch) | |
tree | ce853d626151f3ed9b109c69e3e73ae3e1339630 | |
parent | 608a9c786cb9752086cb232232071750a9b30121 (diff) |
Silence error messages for stale database entries (Fedora bug #841431)
* src/filenames.c (make_filename): Return NULL if the resulting file
is not readable. Update all callers to handle NULL returns.
* src/tests/man-7: New file.
* src/tests/Makefile.am (ALL_TESTS): Add man-7.
* NEWS: Document this.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | src/check_mandirs.c | 4 | ||||
-rw-r--r-- | src/filenames.c | 7 | ||||
-rw-r--r-- | src/man.c | 27 | ||||
-rw-r--r-- | src/tests/Makefile.am | 2 | ||||
-rw-r--r-- | src/tests/Makefile.in | 9 | ||||
-rwxr-xr-x | src/tests/man-7 | 27 |
7 files changed, 62 insertions, 17 deletions
@@ -17,6 +17,9 @@ Major changes since man-db 2.6.5: o Improve support for translation of common elements of help messages. + o Don't issue error messages when the database refers to a page that + no longer exists. + man-db 2.6.5 (27 June 2013) =========================== diff --git a/src/check_mandirs.c b/src/check_mandirs.c index 64108577..9a0c06b4 100644 --- a/src/check_mandirs.c +++ b/src/check_mandirs.c @@ -192,8 +192,8 @@ void test_manfile (const char *file, const char *path) comp extensions */ abs_filename = make_filename (path, NULL, exists, "man"); - debug ("test_manfile(): stat %s\n", abs_filename); - if (stat (abs_filename, &physical) == -1) { + if (!abs_filename || + stat (abs_filename, &physical) == -1) { if (!opt_test) dbdelete (manpage_base, exists); } else { diff --git a/src/filenames.c b/src/filenames.c index 834e095d..f0251ace 100644 --- a/src/filenames.c +++ b/src/filenames.c @@ -27,6 +27,7 @@ #include <string.h> #include <stdlib.h> +#include <unistd.h> #include "xvasprintf.h" @@ -61,6 +62,12 @@ char *make_filename (const char *path, const char *name, if (in->comp && *in->comp != '-') /* Is there an extension? */ file = appendstr (file, ".", in->comp, NULL); + debug ("Checking physical location: %s\n", file); + if (access (file, R_OK) != 0) { + free (file); + return NULL; + } + return file; } @@ -3113,6 +3113,8 @@ static int add_candidate (struct candidate **head, char from_db, char cat, name = req_name; filename = make_filename (path, name, source, cat ? "cat" : "man"); + if (!filename) + return 0; ult = ult_src (filename, path, NULL, get_ult_flags (from_db, source->id), NULL); free (filename); @@ -3330,9 +3332,13 @@ static int display_filesystem (struct candidate *candp) { char *filename = make_filename (candp->path, NULL, candp->source, candp->cat ? "cat" : "man"); + char *title; + + if (!filename) + return 0; /* source->name is never NULL thanks to add_candidate() */ - char *title = xasprintf ("%s(%s)", candp->source->name, - candp->source->ext); + title = xasprintf ("%s(%s)", candp->source->name, candp->source->ext); + if (candp->cat) { int r; @@ -3420,9 +3426,7 @@ static int display_database (struct candidate *candp) if (in->id < STRAY_CAT) { /* There should be a src page */ file = make_filename (candp->path, name, in, "man"); - debug ("Checking physical location: %s\n", file); - - if (access (file, R_OK) == 0) { + if (file) { const char *man_file; char *cat_file; @@ -3444,7 +3448,7 @@ static int display_database (struct candidate *candp) free (lang); lang = NULL; } /* else {drop through to the bottom and return 0 anyway} */ - } else + } else #endif /* NROFF_MISSING */ @@ -3469,9 +3473,7 @@ static int display_database (struct candidate *candp) } file = make_filename (candp->path, name, in, "cat"); - debug ("Checking physical location: %s\n", file); - - if (access (file, R_OK) != 0) { + if (!file) { char *catpath; catpath = get_catpath (candp->path, global_manpath ? SYSTEM_CAT @@ -3481,10 +3483,7 @@ static int display_database (struct candidate *candp) file = make_filename (catpath, name, in, "cat"); free (catpath); - debug ("Checking physical location: %s\n", - file); - - if (access (file, R_OK) != 0) { + if (!file) { /* don't delete here, return==0 will do that */ free (title); @@ -3548,6 +3547,8 @@ static int maybe_update_file (const char *manpath, const char *name, real_name = name; file = make_filename (manpath, real_name, info, "man"); + if (!file) + return 0; if (lstat (file, &buf) != 0) return 0; if (buf.st_mtime == info->_st_mtime) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index da531d51..5c44483d 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -27,7 +27,7 @@ TESTS_ENVIRONMENT = PATH=..:$$PATH; export PATH; \ AM_LOG_FLAGS = $(SHELL) ALL_TESTS = \ lexgrog-1 \ - man-1 man-2 man-3 man-4 man-5 man-6 \ + man-1 man-2 man-3 man-4 man-5 man-6 man-7 \ manconv-1 manconv-2 manconv-3 \ mandb-1 mandb-2 mandb-3 mandb-4 mandb-5 mandb-6 \ whatis-1 \ diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in index 55c42847..13f7fdd6 100644 --- a/src/tests/Makefile.in +++ b/src/tests/Makefile.in @@ -1435,7 +1435,7 @@ TESTS_ENVIRONMENT = PATH=..:$$PATH; export PATH; \ AM_LOG_FLAGS = $(SHELL) ALL_TESTS = \ lexgrog-1 \ - man-1 man-2 man-3 man-4 man-5 man-6 \ + man-1 man-2 man-3 man-4 man-5 man-6 man-7 \ manconv-1 manconv-2 manconv-3 \ mandb-1 mandb-2 mandb-3 mandb-4 mandb-5 mandb-6 \ whatis-1 \ @@ -1680,6 +1680,13 @@ man-6.log: man-6 --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +man-7.log: man-7 + @p='man-7'; \ + b='man-7'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) manconv-1.log: manconv-1 @p='manconv-1'; \ b='manconv-1'; \ diff --git a/src/tests/man-7 b/src/tests/man-7 new file mode 100755 index 00000000..7dd0ed04 --- /dev/null +++ b/src/tests/man-7 @@ -0,0 +1,27 @@ +#! /bin/sh + +# Test for invalid DB entry. +# https://bugzilla.redhat.com/show_bug.cgi?id=841431 + +: ${srcdir=.} +. "$srcdir/testlib.sh" + +: ${MAN=man} +: ${MANDB=mandb} + +init +fake_config /usr/share/man +export MANPATH="$tmpdir/usr/share/man" + +write_page test 1 "$tmpdir/usr/share/man/man1/test.1" \ + UTF-8 '' '' 'test \- top-level test page' +run $MANDB -C "$tmpdir/manpath.config" -u -q "$tmpdir/usr/share/man" + +rm -f "$tmpdir/usr/share/man/man1/test.1" + +echo "No manual entry for test" > "$tmpdir/1.exp" +LC_ALL=C run $MAN -C "$tmpdir/manpath.config" test 2> "$tmpdir/1.out" +expect_pass 'invalid DB entry' \ + 'diff -u "$tmpdir/1.exp" "$tmpdir/1.out"' + +finish |