CVSROOT:        /cvs
Module name:    src
Changes by:     schwa...@cvs.openbsd.org        2025/07/09 06:49:32

Modified files:
        usr.bin/mandoc : man_validate.c 

Log message:
If the first argument of the .TH macro (the manual page name) is an
empty string (as in: .TH "" ...), which is invalid syntax, use the
fixed string "UNTITLED" instead, in the same was as in mdoc(7).
This is needed because if *both* the first and the second arguments are
empty strings (as in: .TH "" "" ...), makewhatis(8) assumes the file is
not a valid man(7) file at all and marks it as preformatted (FORM_CAT)
in mandoc.db(5) such that man(1) displays it verbatim, without
formatting it.

One subtle difference to mdoc(7) remains: if there is no .Dt macro
at all, -mdoc also sets the title to "UNTITLED", which is OK because
the mdoc(7) parser is only used if the user explicitly requested -mdoc
or choose_parser() in read.c detected mdoc(7) by finding a .Dd macro.
The man(7) parser, on the other hand, is always used as a fallback,
even if neither the user requested it with -man, nor choose_parser()
detected a .TH macro.  Thus, for man(7), the "" -> "UNTITLED"
replacement is only done when the validation module finds a .TH ""
macro, but not when there is no .TH macro at all, in order to not
break verbatim display of preformatted manual pages.

Problem reported by Robert Kirkman <rkirkman at termux dot dev>,
see https://github.com/termux/termux-packages/pull/25294 .

An example of a file triggering the problem is the totally crappy file
https://android.googlesource.com/platform/packages/modules/adb/+show/refs/heads/main/docs/user/adb.1.md
(which is hardly worth calling a "manual page").  When the equally crappy
pandoc(1) program is used to convert that to man(7) format - even though
calling the result a "man(7) file" is quite a stretch - that file
contains this invalid line triggering the issue: .TH "" "" "" ""

Reply via email to