Fix three bugs regarding the interaction of \z and \h:
authorschwarze <schwarze@openbsd.org>
Wed, 27 Apr 2022 13:30:19 +0000 (13:30 +0000)
committerschwarze <schwarze@openbsd.org>
Wed, 27 Apr 2022 13:30:19 +0000 (13:30 +0000)
commita6e3a6a98c169d60addf6e5f27019d34b95e846c
tree72da96217569160465d2b4dbabbcbcfb0b1b1dfe
parent21fcc688fe2115accac6920f4d3b170eabf9d910
Fix three bugs regarding the interaction of \z and \h:

1. The combination \z\h is a no-op whatever the argument may be.
In the past, the \z only affected the first space character generated
by the \h, which was wrong.

2. For the conbination \zX\h with a positive argument, the first
space resulting from the \h is not printed but consumed by the \z.

3. For the combination \zX\h with a negative argument, application
of the \z needs to be completed before the \h can be started.
In the past, if this combination occurred at the beginning of an
output line, the \h backed up to the beginning of the line and
after that, the \z attempted to back up even further, triggering
an assertion.

Bugs found during an audit of assignments to termp->col that i
started after the bugfix tbl_term.c rev. 1.65.  The assertion
triggered by bug 3 was *not* yet found by afl(1).
regress/usr.bin/mandoc/roff/esc/Makefile
regress/usr.bin/mandoc/roff/esc/hneg.in [new file with mode: 0644]
regress/usr.bin/mandoc/roff/esc/hneg.out_ascii [new file with mode: 0644]
regress/usr.bin/mandoc/roff/esc/z.in
regress/usr.bin/mandoc/roff/esc/z.out_ascii
usr.bin/mandoc/term.c