diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2019-02-06 21:11:43 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2019-02-06 21:11:43 +0000 |
commit | 386d70b32810ee1090f13d0944310eb93a0ba0fc (patch) | |
tree | 3f894d3f306d64ebe183d2f08edc2f8b7ffe8dcc /regress/roff/rn | |
parent | 3b603764164fcabf9c701ff02e59f9410c580ae8 (diff) | |
download | mandoc-386d70b32810ee1090f13d0944310eb93a0ba0fc.tar.gz |
Let roff_getname() end the roff identifier at a tab character
and audit all its callers whether termination is handled correctly.
Resulting improvements:
* An escape or tab ending the macro name in a macro invocation
is discarded, and argument processing is started after it.
* An escape or tab ending a name in ".if d" and ".if r" is preserved.
* An escape ending a name in ".ds" causes the whole request to be ignored.
* A tab ending a name in ".ds" becomes part of the string.
* An escape or tab ending a name in ".rm"
causes the rest of the line to be ignored.
* An escape or tab ending the first name in ".als", ".rn", or ".nr"
causes the whole request to be ignored.
Kurt Jaeger <pi at FreeBSD> made me aware of
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235456#c0
and in that bug report, comment 0 item (3) is a special case
of this class of issues.
Yes, the "mh" manual pages are no doubt among the worst on the planet.
Diffstat (limited to 'regress/roff/rn')
-rw-r--r-- | regress/roff/rn/Makefile | 5 | ||||
-rw-r--r-- | regress/roff/rn/tab.in | 28 | ||||
-rw-r--r-- | regress/roff/rn/tab.out_ascii | 15 | ||||
-rw-r--r-- | regress/roff/rn/tab.out_lint | 2 |
4 files changed, 48 insertions, 2 deletions
diff --git a/regress/roff/rn/Makefile b/regress/roff/rn/Makefile index 87ef7fe1..8d87c4f1 100644 --- a/regress/roff/rn/Makefile +++ b/regress/roff/rn/Makefile @@ -1,5 +1,6 @@ -# $OpenBSD: Makefile,v 1.10 2017/03/07 20:00:02 schwarze Exp $ +# $OpenBSD: Makefile,v 1.2 2019/02/06 20:54:28 schwarze Exp $ -REGRESS_TARGETS = append +REGRESS_TARGETS = append tab +LINT_TARGETS = tab .include <bsd.regress.mk> diff --git a/regress/roff/rn/tab.in b/regress/roff/rn/tab.in new file mode 100644 index 00000000..e8fdbedc --- /dev/null +++ b/regress/roff/rn/tab.in @@ -0,0 +1,28 @@ +.\" $OpenBSD: tab.in,v 1.1 2019/02/06 20:54:28 schwarze Exp $ +.Dd $Mdocdate$ +.Dt RN-TAB 1 +.Os +.Sh NAME +.Nm rn-tab +.Nd tab characters in macro renaming requests +.Sh DESCRIPTION +.de test1 +testval +.. +trying to rename with a tab between the names: +.rn test1 test2 +.br +calling the macro with the old name: +.test1 +.br +calling the macro with the new name: +.test2 +.Pp +trying to rename with a tab after the names: +.rn test1 test2 ignored +.br +calling the macro with the old name: +.test1 +.br +calling the macro with the new name: +.test2 diff --git a/regress/roff/rn/tab.out_ascii b/regress/roff/rn/tab.out_ascii new file mode 100644 index 00000000..6f00c8c1 --- /dev/null +++ b/regress/roff/rn/tab.out_ascii @@ -0,0 +1,15 @@ +RN-TAB(1) General Commands Manual RN-TAB(1) + +NNAAMMEE + rrnn--ttaabb - tab characters in macro renaming requests + +DDEESSCCRRIIPPTTIIOONN + trying to rename with a tab between the names: + calling the macro with the old name: testval + calling the macro with the new name: + + trying to rename with a tab after the names: + calling the macro with the old name: + calling the macro with the new name: testval + +OpenBSD February 6, 2019 OpenBSD diff --git a/regress/roff/rn/tab.out_lint b/regress/roff/rn/tab.out_lint new file mode 100644 index 00000000..50998895 --- /dev/null +++ b/regress/roff/rn/tab.out_lint @@ -0,0 +1,2 @@ +mandoc: tab.in:19:2: ERROR: skipping unknown macro: .test2 +mandoc: tab.in:25:2: ERROR: skipping unknown macro: .test1 |