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/cond/string.in | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'regress/roff/cond/string.in') diff --git a/regress/roff/cond/string.in b/regress/roff/cond/string.in index b3bf14b4..273984be 100644 --- a/regress/roff/cond/string.in +++ b/regress/roff/cond/string.in @@ -1,5 +1,5 @@ -.\" $OpenBSD: string.in,v 1.3 2017/07/04 14:53:26 schwarze Exp $ -.TH STRING 1 "June 14, 2017" +.\" $OpenBSD: string.in,v 1.4 2019/02/06 20:54:28 schwarze Exp $ +.TH STRING 1 "February 6, 2019" .SH NAME string \- conditional testing whether a string is defined .SH DESCRIPTION @@ -32,3 +32,11 @@ mymacval standard macro is .ie d PP defined .el not defined \(em OOPS +.PP +identifier and tab: +.ie d mystr mystr is defined +.el OOPS +.PP +escape sequence after identifier: +.ie d mystr\(enmystr is defined +.el OOPS -- cgit v1.2.3-56-ge451