summaryrefslogtreecommitdiffstats
path: root/usr.bin/mandoc/mdoc_validate.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* Audit strlcpy(3)/strlcat(3) usage.schwarze2014-04-231-21/+12
| | | | | | | | | | | | | * Repair three instances of silent truncation, use asprintf(3). * Change two instances of strlen(3)+malloc(3)+strlcpy(3)+strlcat(3)+... to use asprintf(3) instead to make them less error prone. * Cast the return value of four instances where the destination buffer is known to be large enough to (void). * Completely remove three useless instances of strlcpy(3)/strlcat(3). * Mark two places in -Thtml with XXX that can cause information loss and crashes but are not easy to fix, requiring design changes of some internal interfaces. * The file mandocdb.c remains to be audited.
* strlen+malloc+snprintf is error prone;schwarze2014-04-201-23/+14
| | | | rewrite post_lb() to use asprintf(3) instead
* make sure static buffers for snprintf(3) are large enoughschwarze2014-04-201-7/+5
| | | | and cast snprintf return value to (void) where they are
* KNF: case (FOO): -> case FOO, remove /* LINTED */ and /* ARGSUSED */,schwarze2014-04-201-254/+240
| | | | | remove trailing whitespace and blanks before tabs, improve some indenting; no functional change
* Using macros in .Sh header lines, or having .Sm off or .Bk -words openschwarze2014-04-151-12/+8
| | | | | | | | | while processing .Sh, is not at all recommended, but it's not strictly a syntax violation either, and in any case, mandoc must not die in an assertion. I broke this in rev. 1.124. Crash found while trying to read the (rather broken) original 4.3BSD-Reno od(1) manual page.
* recognise the CONTEXT section. we consider it only applicable todlg2014-03-311-1/+4
| | | | | | | | section 9 manpages for now. requested by schwartz@ pre 5.5 tweaks by jmc@ schwartz@ ok schwartz@
* Implement the roff(7) .ll (line length) request.schwarze2014-03-301-1/+2
| | | | | Found by naddy@ in the textproc/enchant(1) port. Of course, do not use this in new manuals.
* Retire the old concat() function.schwarze2014-03-231-78/+27
| | | | | | | | For .Sh, i wasn't even needed at all. For .Dd, .Nm, and .Os, use the new mdoc_deroff() instead. This gets rid of the last limited-size static buffers in this file, hence eliminates the last explicit MANDOCERR_MEM throwers here, and it shortens the code by 50 lines.
* avoid repetitive code for asprintf error handlingschwarze2014-03-211-6/+4
|
* The files mandoc.c and mandoc.h contained both specialised low-levelschwarze2014-03-211-1/+2
| | | | | | | functions used for multiple languages (mdoc, man, roff), for example mandoc_escape(), mandoc_getarg(), mandoc_eos(), and generic auxiliary functions. Split the auxiliaries out into their own file and header. While here, do some #include cleanup.
* After Werner Lemberg accepted and committed some updates to the manualschwarze2014-02-161-3/+5
| | | | | | page template contained in groff_mdoc(7), catch up with our own stuff. In particular, allow ERRORS in section 4 and DIAGNOSTICS in section 9. ok jmc@
* Remove useless use of strnlen(3).schwarze2014-01-111-2/+2
| | | | Yuckiness pointed out by deraadt@.
* Cache the result of uname(3) such that we don't need to call itschwarze2014-01-071-30/+23
| | | | | over and over again for each manual; found with gprof(1). Speeds up mandocdb(8) -Q by 3%, now at 39.5% of makewhatis(8).
* Another 18% speedup for mandocdb(8) -Q, found by gprof(1).schwarze2014-01-061-6/+6
| | | | | | | In -Q mode, refrain form validating and normalizing the format of the date given in .Dd or .TH, as it won't be used anyway. For /usr/share/man, mandocdb -Q now takes 45% of the time of makewhatis(8).
* Joerg Sonnenberger contributed copyrightable amounts of text toschwarze2014-01-061-1/+2
| | | | | | some files. To make it clear that he also put his contributions under the ISC license, with his explicit permission, add his Copyright notice to the relevant files. No code change.
* The "value" argument to the roff(7) .nr requests ends right beforeschwarze2013-12-151-3/+3
| | | | | | | | the first non-digit character. While here, implement and document an optional sign, requesting increment or decrement, as documented in the Ossanna/Kernighan/Ritter troff manual and supported by groff. Reported by bentley@ on discuss at mdocml.
* There are three kinds of input lines: text lines, macros takingschwarze2013-10-211-3/+9
| | | | | | | | | | | | | | positional arguments (like Dt Fn Xr) and macros taking text as arguments (like Nd Sh Em %T An). In the past, even the latter put each word of their arguments into its own MDOC_TEXT node; instead, concatenate arguments unless delimiters, keeps or spacing mode prevent that. Regarding mandoc(1), this is internal refactoring, no output change intended. Once we will switch mandocdb(8) from DB to SQLite in the future, this is going to be required to support search expressions crossing word boundaries, and it will reduce both database sizes and build times by a bit more than 5% each.
* We don't do hyphenation, but we allow breaking the line at hyphens that areschwarze2013-10-061-20/+62
| | | | | | | | | | | | already there in the middle of words. So far, we only allowed this on text lines. Now it turns out some macros allow this for their arguments, too, in particular .Nd and most of the .%? citation macros. Issue found by Franco Fichtner <franco at lastsummer dot de> while doing systematic groff-mandoc comparisons in the DragonFly base system, THANKS! While here, garbage collect two empty prevalidator function pointer lists and sort a couple of function declarations.
* If there is random stuff inside a .Bl block body before the first .It,schwarze2013-10-061-20/+59
| | | | | | | | | | | do not throw a FATAL error and do not die, but just throw a WARNING and move the stuff out of the .Bl block. This bug felt completely 2008-ish; meanwhile, such bugs from the Kristaps-doesnt-like-syntax-errors-so-lets-just-give-up--Era are becoming rare, but this was one of the last survivors. Thanks to bentley@ for reminding me to finally fix this.
* Support setting arbitrary roff(7) number registers,schwarze2013-10-031-6/+7
| | | | | | | | | | | | | | | preserving read support for the ".nr nS" SYNOPSIS state register; read support for arbitrary registers is still not available. Inspired by NetBSD roff.c rev. 1.18 (Christos Zoulas, March 21, 2013), but implemented differently. I don't want to have yet another different implementation of a hash table in mandoc - it would be the second one in roff.c alone and the fifth one in mandoc grand total. Instead, i designed and implemented roff_setreg() and roff_getreg() to be similar to roff_setstrn() and roff_getstrn(). Once we feel the need to optimize, we can introduce one common hash table implementation for everything in mandoc.
* One of the WARNING messages has to use the word "section" twice in twoschwarze2013-09-161-2/+3
| | | | | | | | | | different meanings, that cannot be helped. But we can make this less confusing by stating that the second instance refers to stuff like (2), (3), and (9), and by adding the sections header the first instance refers to, for example ERRORS or RETURN VALUES. Source for confusion noticed by Jan Stary <hans at stare dot cz>, better wording suggested by jmc@, tweaked by me.
* Put .%C before .%D in .Rs outputschwarze2013-08-051-3/+3
| | | | | | | | | | because that's the usual order in formal citations. My patch that was accepted into groff by Werner Lemberg uses the same order, so keep groff and mandoc consistent. Committing now because jmc@ already starts to rely on the .%C macro, see for example /usr/src/usr.bin/bdes/bdes.1 rev. 1.11.
* Cleanup naming of local variables to make the code easier on the eye:schwarze2012-11-171-17/+17
| | | | | | | | Settle for "struct man *man", "struct mdoc *mdoc", "struct meta *meta" and avoid the confusing "*m" which was sometimes this, sometimes that. No functional change. ok kristaps@ some time ago
* Warn about unknown volume or arch in Dt macro arguments;schwarze2012-11-161-2/+2
| | | | patch written by Nicolas Joly <njoly at pasteur dot fr>.
* Fix handling of paragraph macros inside lists:schwarze2012-07-181-5/+34
| | | | | | | | * When they are trailing the last item, move them outside the list. * When they are trailing any other none-compact item, drop them. Improves formatting of 40 pages, e.g. grep(1), ksh(1), netstat(1), ath(4), bsd.port.mk(5), pf.conf(5), mount(8), crypto(9).
* Several -mdoc parser improvements related to vertical spacing:schwarze2012-07-161-7/+37
| | | | | | | | | * So far, .Pp and .Lp were removed before paragraph type blocks. * Now also remove .br before paragraph type blocks. * Treat .Lp as a paragraph like .Pp, so remove .Pp, .Lp, .br before it. * Do not treat .sp as a paragraph, don't remove anything before it. * After .Sh, .Ss, .Pp, and .Lp, remove .Pp, .Lp, .sp, .br, and blank lines. * After .sp and .br, remove .br.
* The post_nm() validation function crashed when the first .Nm child nodeschwarze2012-07-121-13/+18
| | | | | | | | | was a non-text node. Fix this by rewriting post_nm() to always set the meta name to UNKNOWN when the name is missing or unusable. While here, make MANDOCERR_NONAME an ERROR, as it usually renders the page content unintelligible. Bug reported by Maxim <Belooussov at gmail dot com>, thanks.
* fix position and formatting of %Uschwarze2012-07-111-3/+3
|
* * implement -Tman .Bl -item -inset -diag -ohang -dash -hyphen -enum .Itschwarze2012-07-101-5/+17
| | | | | | | | | | * fix -Tman .Bl -bullet .It * adjust the -Tascii .Bl -bullet -dash -hyphen .It default and minimum width to new groff standards, it changed from 4n (in groff 1.15) to 2n (in groff 1.21) * same for -Tascii -enum, it changed from 5n to 2n * use -hang formatting for -Tascii -enum -width 2n * for -Tascii -enum, the default is -width 3n
* Support -Ios='OpenBSD 5.1' to override uname(3) as the source of theschwarze2012-05-241-12/+13
| | | | | | | | default value for the mdoc(7) .Os macro. Needed for man.cgi on the OpenBSD website. Problem with man.cgi first noticed by deraadt@; beck@ and deraadt@ agree with the way to solve the issue.
* Two bugfixes regarding the -width and -offset macro arguments:schwarze2012-04-151-4/+9
| | | | | | | | | | | | 1) They consume the next argument even if it starts with a dash. 2) When -width is the last argument on the line such that the actual width argument is missing, downgrade from a fatal to a non-fatal error, just like for -offset. The formatting still doesn't agree with groff, but at least we don't die any longer. Item 2 was observed and that part of the patch coded by kristaps@, who found lots of instances of this particular formatting error in Mac OSX manuals.
* remove useless "#ifdef __linux__" that crept in,schwarze2011-12-031-1/+11
| | | | and trivial sync to bsd.lv (two new comments)
* In man(7), when no explicit volume name is given, use the defaultschwarze2011-12-021-2/+2
| | | | | | | | | | | | volume name for the respective manual section, just like in mdoc(7). This gives us nicer page headers for cvs(1), lynx(1), tic(1), mkhybrid(8), and many curses(3) manuals. ok kristaps@ To not break compatibility, i wrote a corresponding patch for GNU troff which Werner Lemberg accepted upstream at rev. 1.65 of: http://cvs.savannah.gnu.org/viewvc/groff/tmac/an-old.tmac?root=groff
* Avoid a NULL pointer access if an .Rs block body contains nothingschwarze2011-11-191-1/+9
| | | | | | but invalid nodes. Output still differs a lot from groff, but at least let's not crash. Problem found and patch provided by joerg@, thanks!
* When processing .Sh HEAD, as soon as we know which section this is,schwarze2011-11-161-1/+6
| | | | | | | | | | fix up the section attributes of the HEAD, it's parent BLOCK, and all its (text) children. This is required because the section attributes get set when each node is allocated, i.e. before processing the content of the node itself. Thus, the listed nodes got the section attribute of the preceding section. No need to fix up the BODY, all is fine there already. Found while implementing TYPE_Sh for mandocdb(8).
* Remove a bunch of useless assignments,schwarze2011-10-161-6/+5
| | | | | | | and assert that print_bvspace cannot be called on NULL pointers. No change in behaviour, none of these were bugs, but the code becomes easier to understand. Based on a clang report posted by joerg@; ok kristaps@.
* sync to version 1.11.7 from kristaps@schwarze2011-09-181-71/+52
| | | | | | | | main new feature: support the roff(7) .tr request plus various bugfixes and some refactoring regressions are so minor that it's better to get this in and fix them in the tree
* sync to version 1.11.5:schwarze2011-09-181-2/+2
| | | | | | | | adding an implementation of the eqn(7) language by kristaps@ So far, only .EQ/.EN blocks are handled, in-line equations are not, and rendering is not yet very pretty, but the parser is fairly complete.
* Merge release 1.11.3, almost all code by kristaps@:schwarze2011-05-291-14/+22
| | | | | | | | | * Unicode output support (no Unicode input yet, though). * Refactoring: completely handle predefined strings in roff.c. - New function mandoc_escape() replaces a2roffdeco() and mandoc_special(). - Start using mandoc_getarg() in mdoc_argv.c. - Clean up parsing of delimiters in mdoc(7). * And many minor fixes and lots of cleanup.
* Merge version 1.11.1:schwarze2011-04-241-14/+15
| | | | | | | | | | | | | | Again lots of cleanup and maintenance work by kristaps@. - simplify error reporting: less function pointers, more mandoc_[v]msg - main: split document parsing out of main.c into read.c - roff, mdoc, man: improved recognition of control characters - roff: better handling of if/else stack overflows - roff: add some predefined strings for backward compatibility - mdoc, man: empty sections are not errors - mdoc: move delimiter handling to libmdoc - some header restructuring and some minor features and fixes This merge causes two minor regressions that i will fix in separate commits right afterwards.
* Merge version 1.10.10:schwarze2011-04-211-13/+143
| | | | | | | | | | lots of cleanup and maintenance work by kristaps@. - move some main.c globals into struct curparse - move mandoc_*alloc to mandoc.h such that all code can use them - make mandoc_isdelim available to formatting frontends - dissolve mdoc_strings.c, move the code where it is used - make all error reporting functions void, their return values were useless - and various minor cleanups and fixes
* Import the foundation for eqn(7) support.schwarze2011-03-201-1/+5
| | | | | | | | Written by kristaps@. For now, i'm adding one line to each of the four frontends to just pass the input text through to the output, not yet interpreting any of then eqn keywords.
* Clean up date handling,schwarze2011-03-071-15/+14
| | | | | | | | | | | | as a first step to get rid of the frequent petty warnings in this area: - always store dates as strings, not as seconds since the Epoch - for input, try the three most common formats everywhere - for unrecognized format, just pass the date though verbatim - when there is no date at all, still use the current date Originally triggered by a one-line patch from Tim van der Molen, <tbvdm at xs4all dot nl>, which is included here. Feedback and OK on manual parts from jmc@. "please check this in" kristaps@
* If .Ns is specified on its own line, ignore it, like groff does;schwarze2011-02-061-2/+13
| | | | from kristaps@.
* Make .Bx accept not more than two arguments.schwarze2011-01-301-2/+22
| | | | | | | Convert the first character of the second argument to uppercase. Append the second argument with a hyphen. Improves chpass(1), column(1), fstat(1), ... from kristaps@
* Like in groff, if .%B is specified, quote .%T; from kristaps@.schwarze2011-01-301-3/+3
|
* Check argument count validation for all in_line() macros.schwarze2011-01-221-37/+21
| | | | | | | | Most empty in_line() macros are already removed by the parser, so there is no need to check again in mdoc_validate.c. This also downgrades almost all remaining argument count issues from ERROR to WARNING. ok kristaps@
* Merge kristaps@' cleaner tbl integration, removing mine;schwarze2011-01-041-23/+18
| | | | there are still a few bugs, but fixing these will be easier in tree.
* Partial cleanup of argument count validation in mdoc(7):schwarze2011-01-031-65/+66
| | | | | | | | | | | | * Do not segfault on empty .Db, .Rs, .Sm, and .St. * Let check_count() really throw the requested level, not always ERROR. * Downgrade most bad argument counts from ERROR to WARNING. * And some related internal cleanup. Looks fine to kristaps@. Note that the macros using eerr_ge1() still need to be checked at a later time; but as all the others are done, let's use what we already have.
* Reorg by Kristaps: In libmdoc, replace the union of pointers to structsschwarze2010-12-291-93/+62
| | | | | | | of macro-specific data by a pointer to a union of structs, which makes the code simpler and more robust at the expense of a small memory overhead. Merging was somewhat difficult because we mustn't break tbl(1) support which the bsd.lv version does not yet have.