summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc
AgeCommit message (Collapse)Author
2019-11-10Add a Content-Security-Policy HTTP header that allows only CSS.Anthony J. Bentley
This ensures that in a modern browser that understands the header, mandoc rendering bugs cannot possibly be interpreted as JavaScript. ok schwarze@
2019-11-09In the past, generating comment nodes stopped at the .TH or .DdIngo Schwarze
macro, which is usually close to the beginning of the file, right after the Copyright header comments. But espie@ found horrible input files in the textproc/fstrcmp port that generate lots of parse nodes before even getting to the header macro. In some formatters, comment nodes after some kinds of real content triggered assertions. So make sure generation of comment nodes stops once real content is encountered.
2019-10-01For invalid queries and for valid queries returning no result,Ingo Schwarze
return the appropriate 40x status code rather than 200. Improvement suggested and diff tested by John Gardner <gardnerjohng at gmail dot com>.
2019-09-15Fix line breaking in no-fill mode (.Bd -unfilled/<pre>),Ingo Schwarze
which apparently didn't work since the .Pp/<p> reorg. The new logic is more similar to what the terminal formatter does: 1. Before a node that starts a new mdoc(7) input line, start a new HTML output line. 2. An empty input line or a .Pp causes an empty output line. 3. Nothing needs to be done at the end of a node. Severe misformatting was reported in table(5) by Edgar Pettijohn <edgar at pettijohn dash web dot com> on misc@.
2019-09-13Improve validation of function names:Ingo Schwarze
1. Relax checking to accept function types of the form "ret_type (fname)(args)" (suggested by Yuri Pankov <yuripv dot net>). 2. Tighten checking to require the closing parenthesis.
2019-09-05Do not clear HTML_NOSPACE in print_indent().Ingo Schwarze
I don't think there ever was a reason for doing so. Besides, there is a discrepacy with respect to the point in the document affected. That flag controls whitespace at the current formatting point. But when HTML_BUFFER is in effect, the line break and indentation is typically inserted one word further to the left. Anything happening at that point to the left can't reasonably influence spacing at the different point further to the right. Among other effects, this change avoids some spurious line breaks in HTML code at points where they weren't supposed to happen, line breaks that in some cases caused undesirable, visible whitespace when the resulting HTML was rendered.
2019-09-03Wrap text and phrasing elements in paragraphs unless alreadyIngo Schwarze
contained in flow containers; never put them directly into sections. This helps to format paragraphs with the CSS class selector .Pp. Suggested by bentley@ and also by Colin Watson <cjwatson at debian> via Michael Stapelberg <stapelberg at debian>, see https://github.com/Debian/debiman/issues/116
2019-09-03Format .Nd with more logically with <span> rather than <div>; after all,Ingo Schwarze
it is supposed to be a one-line description. For the case where .Nd generates flow content (which is very bad style but syntactically valid), rely on the new feature of html_close_paragraph() to close out the <span> prematurely, effectively moving the flow content out of the .Nd for HTML presentation. For the final closing, also rely on the new html_close_paragraph() functionality, this time triggered by the subsequent block, which will typically be .Sh SYNOPSIS.
2019-09-03oops, fix use after free in previousIngo Schwarze
2019-09-03Make html_close_paragraph() more versatile, more robust, lessIngo Schwarze
dependent on individual HTML elements, and simpler: don't just close <p>, <pre>, and <a>, but any element that establishes phrasing context. This doesn't change output for any OpenBSD manual page, but it will allow using this function more safely and at more places in the future.
2019-09-01delete the TAG_IDIV crutch, which is no longer usedIngo Schwarze
2019-08-29In the HTML formatter, assert(3) that no HTML nesting violation occurs.Ingo Schwarze
Tested on the complete manual page trees of Version 7 AT&T UNIX, 4.4BSD-Lite2, POSIX-2013, OpenBSD 2.2 to 6.5 and -current, FreeBSD 10.0 to 12.0, NetBSD 6.1.5 to 8.1, DragonFly 3.8.2 to 5.6.1, and Linux 4.05 to 5.02.
2019-08-02minor sync of the inline stylesheet with mandoc.css:Ingo Schwarze
delete unimportant .Pp rule and shorten overly specific selectors
2019-07-28Simplification, no functional change:Ingo Schwarze
Delete the "argc" argument from fs_search() which is now always 1, and move error reporting to the main() program where it is more logically placed and easier to see.
2019-07-28There is no point in pledge(2)ing literally the same list twice,Ingo Schwarze
so delete the second copy. No functional change.
2019-07-28In man(1) mode, do the search for each name independently, andIngo Schwarze
show the results in the order of the command line arguments. Implemented by separating the code for man(1) and apropos(1) in the main() program. Surprisingly, the number of lines of code remains unchanged. Issue reported by deraadt@, additional input from millert@.
2019-07-28Improve structure, no functional change:Ingo Schwarze
Unify code to process one single input file and move it into a dedicated new function.
2019-07-27Move two more output state variables into the new struct outstate.Ingo Schwarze
Also, move setting of tag_files.tagname into tag_init(). No functional change.
2019-07-26Cleanup, no functional change:Ingo Schwarze
For clarity, stop storing the same information (in this case, -O settings) in two structs. Give the local struct in main.c a more descriptive name (output state).
2019-07-26Structural cleanup, no functional change:Ingo Schwarze
Mixing parser and formatter state in the same struct was a bad idea, so pull the parser state and configuration out of it. This makes sure output options are not passed into parser functions and parser options are not passed into output functions. While here, add comments to the important local variables in main().
2019-07-26Structural cleanup, no functional change:Ingo Schwarze
Move process group management out of main() into its own function because it has its own, self-contained logic and its own local variables.
2019-07-23tagging support for .TP and .TQ; try e.g. man -O tag=commit cvsIngo Schwarze
2019-07-22Slowly start implementing tagging support for man(7) pages, evenIngo Schwarze
though it is obvious that this can never become as good as for mdoc(7) pages. As a first step, tag alphabetic arguments of .IP macros, which are often used for lists of options and keywords. Try "man -O tag=g as" to get the point. Thanks to Leah Neukirchen for recently reminding me that exploring how much can be done in this respect may be worthwhile: it is likely to slightly improve usability while adding only small amounts of relatively straightforward code.
2019-07-19#define a handful of constant strings to reduce the diff to -portable;Ingo Schwarze
now, the diff is about -30 +150 lines (about 0.4%)
2019-07-19If no tags were generated at all, unlink(2) the empty tags file asIngo Schwarze
soon the condition can be detected and do not pass it to less(1). This may happen for man(7) pages, for preformatted pages, and for very simple pages like true(1). The main benefit is that :t inside less(1) yields the clearer diagnostic message "No tags file" rather than the mildly confusing "No such tag in tags file": the latter might encourage further, futile attempts to jump to other tags. Improvement suggested by Leah Neukirchen <leah at vuxu dot org> from The Void.
2019-07-15don't print the final heads-up about messageIngo Schwarze
when a search did not yield any manual pages to display; issue found with regress/usr.bin/mandoc/db/
2019-07-14If messages are shown and output is printed without a pager, displayIngo Schwarze
a heads-up on stderr at the end because otherwise, users may easily miss the messages: because messages typically occur while parsing, they typically preceed the output. This is most useful with flag combinations like "-c -W all" but may also help in some unusual error scenarios. Inconvenient ordering of output originally pointed out by espie@ for the example situation that /tmp/ is not writeable.
2019-07-11When parsing a tab character that is not preceded by a space characterIngo Schwarze
on an .It -column line, args() sets the MDOC_PHRASEQL flag to Quote the Last word of the Phrase. Even if it turns out this quoting is not needed because the word is already quoted for other reasons, clear the flag at the end of parsing the phrase, such that the flag does not leak to the next phrase. This patch fixes the bug that the trailing Macro on a line of the form .It "word<tab>word" Ta word Macro<eol> was incorrectly considered quoted and hence not parsed. Bug found by Havard Eidnes (he@) with the NetBSD gettytab(5) manual page: https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54361 Reported via Thomas Klausner (wiz@).
2019-07-10Some time ago, i simplified mandoc_msg() such that it can be usedIngo Schwarze
everywhere and not only in the parsers. For more uniform messages, use it at more places instead of err(3), in particular in the main program. While here, integrate a few trivial functions called at exactly one place into the main option parser, and let a few more functions use the normal convention of returning 0 for success and -1 for error.
2019-07-10in man.cgi(8), disable -O toc by default; requested by deraadt@Ingo Schwarze
2019-07-03prevent mandoc from segfaulting if /tmp is not writableMarc Espie
okay schwarze@
2019-07-01delete trailing whitespace and space-tab sequences; no code change;Ingo Schwarze
patch from Michal Nowak <mnowak at startmail dot com> who found these with git pbchk in the illumos tree
2019-06-27Fix mandoc_normdate() and the way it is used.Ingo Schwarze
In the past, it could return NULL but the calling code wasn't prepared to handle that. Make sure it always returns an allocated string. While here, simplify the code by handling the "quick" attribute inside mandoc_normdate() rather than at multiple callsites. Triggered by deraadt@ pointing out that snprintf(3) error handling was incomplete in time2a().
2019-06-27Improve "man -h" output.Ingo Schwarze
1. For pages lacking a SYNOPSIS, show the NAME section rather than nothing. 2. Do not print a stray blank before the beginning of a SYNOPSIS. Both issues reported by, and patch OK'ed by, tb@.
2019-06-11Do not access a NULL pointer if a table contains a horizontal lineIngo Schwarze
next to a table line having fewer columns than the table as a whole. Bug found by Stephen Gregoratto <dev at sgregoratto dot me> with aerc-config(5).
2019-06-03Explicitly state that the cases in the inner switch in term_fill()Ingo Schwarze
are exhaustive. While there is no bug, being explicit has no downside is is potentially safer for the future. Michal Nowak <mnowak at startmail dot com> reported that gcc 4.4.4 and 7.4.0 on illumos throw -Wuninitialized false positives.
2019-06-03Initialize the local variable "lastln" in mparse_buf_r().Ingo Schwarze
While there is no bug, it logically makes sense given the meaning of the variable that lastln is NULL as long as firstln is NULL. Michal Nowak <mnowak at startmail dot com> reported that gcc 4.4.4 and 7.4.0 on illumos throw -Wuninitialized false positives.
2019-06-03Initialize the local variable "act" in print_mdoc_node().Ingo Schwarze
While there is no bug, it helps clarity, and it is also safer in this particular code because in case a bug gets introduced later, accessing a NULL pointer is less dangerous than accessing an uninitialized pointer. Michal Nowak <mnowak at startmail dot com> reported that gcc 4.4.4 and 7.4.0 on illumos throw -Wuninitialized false positives.
2019-06-02Support prefers-color-scheme: dark.Ingo Schwarze
The :visited rule was contributed by <Armin at Besirovic dot com>. Guidance and OK tj@.
2019-05-26use proper crossreferencesChristian Weisgerber
2019-05-21Do not print the style message "missing date" when the date is givenIngo Schwarze
as "$Mdocdate$" without an actual date. That is the canonical way to write a new manual page and not bad style at all. Misleading message reported by kn@ on tech@.
2019-05-11socppc makes an extended visit to the bigbucket.Theo de Raadt
ok kettenis
2019-05-03avoid duplicate "bad argument" error message, also shortening the codeIngo Schwarze
2019-05-03Enter dangling .so links into the database, to avoid harassingIngo Schwarze
users of man(1) about running makewhatis(8), which won't help. Seeing the content of the broken .so request might even help users to figure out how to access the manual page they want. Fixing the last issue reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 .
2019-05-03When processing unknown output options, prevent passing NULL to printf.anton
ok schwarze@
2019-05-03In fs_lookup(), use stat(2) rather than access(2) to check file existence.Ingo Schwarze
Some mildly broken real-world packages on some operating systems contain dangling symlinks in manual page directories: pestering the user to run makewhatis(8) makes no sense because that won't help. On the other hand, missing read permissions deserve ugly error messages and are unlikely to occur in practice anyway. Fixing an issue reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 .
2019-05-03In man(1) mode with a specific section requested,Ingo Schwarze
try harder to find the best match. Use this order of preference: 1. The section in both the directory name and the file name matches exactly. 2. The section in the file name matches exactly. 3. The section in the directory name matches exactly. 4. Neither of them matches exactly. The latter can happen when mansearch() finds substring matches or when the second .Dt argument mismatches the dir and file names. Lorenzo Beretta <loreb at github> reported that this caused real problems on Void Linux, like "man 3 readline" showing readline(3m). See https://github.com/void-linux/void-packages/issues/9868 for details.
2019-05-03In man(1) mode, when the first argument starts with a digit,Ingo Schwarze
optionally followed by a letter, and at least one more argument follows, interpret the first argument as a section name even when additional characters follow after the digit and letter. This is needed because many operating systems have section names consisting of a digit followed by more than one letter - for example Illumos, Solaris, Linux, even NetBSD. There is very little risk of regressions: in the whole corpus of manual pages on man.openbsd.org, there isn't a single manual page name starting with a digit. And even if programs like "0ad" or "4channels" had manual pages, "man 0ad" and "man -a cat 0ad" would still work, only "man -a 0ad cat" will fail with "man: No entry for cat in section 0ad of the manual." Fixing one of the issues reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 .
2019-04-30In man(1) mode, i.e. when asking for a single manual page by name,Ingo Schwarze
prefer file name matches over .Dt/.TH matches over first NAME matches over later NAME matches, but do not change the ordering for apropos(1) nor for man -a. This reverts main.c rev. 1.213 and mansearch.h rev. 1.23 and includes a partial revert of mansearch.c rev. 1.62. Regression reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 .
2019-04-30In HTML output, allow switching the desired font for subsequentIngo Schwarze
text without printing an opening tag right away, and use that in the .ft request handler. While here, garbage collect redundant enum htmlfont and reduce code duplication in print_text(). Fixing an assertion failure reported by Michael <Stapelberg at Debian> in pmRegisterDerived(3) from libpcp3-dev.