From 3c72c09b0b46063f51691bedeabc69413194fb61 Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Wed, 6 Feb 2019 21:11:43 +0000 Subject: 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 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. --- regress/roff/de/Makefile | 7 ++++--- regress/roff/de/tab.in | 41 +++++++++++++++++++++++++++++++++++++++++ regress/roff/de/tab.out_ascii | 21 +++++++++++++++++++++ 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 regress/roff/de/tab.in create mode 100644 regress/roff/de/tab.out_ascii (limited to 'regress/roff/de') diff --git a/regress/roff/de/Makefile b/regress/roff/de/Makefile index 0d024a23..0d4d203f 100644 --- a/regress/roff/de/Makefile +++ b/regress/roff/de/Makefile @@ -1,9 +1,10 @@ -# $OpenBSD: Makefile,v 1.9 2015/02/03 19:37:25 schwarze Exp $ +# $OpenBSD: Makefile,v 1.12 2019/02/06 20:54:28 schwarze Exp $ -REGRESS_TARGETS = append cond escname factorial indir infinite startde TH Dd +REGRESS_TARGETS = append cond escname factorial indir infinite startde tab +REGRESS_TARGETS += TH Dd LINT_TARGETS = escname indir infinite -# groff-1.22.3 defect: +# groff-1.22.4 defect: # infinite recursion aborts output completely SKIP_GROFF = infinite diff --git a/regress/roff/de/tab.in b/regress/roff/de/tab.in new file mode 100644 index 00000000..5f85fe21 --- /dev/null +++ b/regress/roff/de/tab.in @@ -0,0 +1,41 @@ +.\" $OpenBSD: tab.in,v 1.1 2019/02/06 20:54:28 schwarze Exp $ +.Dd $Mdocdate: February 6 2019 $ +.Dt DE-TAB 1 +.Os +.Sh NAME +.Nm de-tab +.Nd tab characters in macro definition lines +.Sh DESCRIPTION +.de test1 ignored +testval \\$1;\\$2 +.. +no argument: +.test1 +.br +argument after_tab: +.test1 after_tab +.br +argument after_tab_and_space: +.test1 after_tab_and_space +.br +argument after_two_tabs: +.test1 after_two_tabs +.br +argument after_tab_tab_space: +.test1 after_tab_tab_space +.Ss End marker +.de test2 endm ignored +testval \\$1;\\$2 +.endm +no argument: +.test2 +.br +argument after_tab: +.test2 after_tab +.Ss Removal +.rm test1 test2 +macro test1 is gone: +.test1 +.br +macro test2 still exists: +.test2 diff --git a/regress/roff/de/tab.out_ascii b/regress/roff/de/tab.out_ascii new file mode 100644 index 00000000..c2a82d87 --- /dev/null +++ b/regress/roff/de/tab.out_ascii @@ -0,0 +1,21 @@ +DE-TAB(1) General Commands Manual DE-TAB(1) + +NNAAMMEE + ddee--ttaabb - tab characters in macro definition lines + +DDEESSCCRRIIPPTTIIOONN + no argument: testval ; + argument after_tab: testval after_tab; + argument after_tab_and_space: testval after_tab_and_space; + argument after_two_tabs: testval after_two_tabs; + argument after_tab_tab_space: testval ;after_tab_tab_space + + EEnndd mmaarrkkeerr + no argument: testval ; + argument after_tab: testval after_tab; + + RReemmoovvaall + macro test1 is gone: + macro test2 still exists: testval ; + +OpenBSD February 6, 2019 OpenBSD -- cgit v1.2.3-56-ge451