bug-groff
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #65320] [pdf] doesn't guard control characters when emitting bookma


From: G. Branden Robinson
Subject: [bug #65320] [pdf] doesn't guard control characters when emitting bookmark diversion
Date: Fri, 16 Feb 2024 10:49:14 -0500 (EST)

URL:
  <https://savannah.gnu.org/bugs/?65320>

                 Summary: [pdf] doesn't guard control characters when emitting
bookmark diversion
                   Group: GNU roff
               Submitter: gbranden
               Submitted: Fri 16 Feb 2024 03:49:13 PM UTC
                Category: Macro - others/general
                Severity: 3 - Normal
              Item Group: Incorrect behaviour
                  Status: In Progress
                 Privacy: Public
             Assigned to: gbranden
             Open/Closed: Open
         Discussion Lock: Any
         Planned Release: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Fri 16 Feb 2024 03:49:13 PM UTC By: G. Branden Robinson <gbranden>
Alex Colomar [https://lists.gnu.org/archive/html/groff/2024-02/msg00039.html
reported to the _groff_ list]:


> here's [a warning] that I've only seen in -Tpdf.  It might be a bug in
> -Tpdf.
>
>       troff:man7/path_resolution.7:135: warning: macro 'and' not defined 
> (possibly missing space after 'an')
>       make: *** [share/mk/build/pdf/troff.mk:22: 
> .tmp/man/man7/path_resolution.7.pdf.set] Error 1
>       make: *** Deleting file '.tmp/man/man7/path_resolution.7.pdf.set'
> 
> Here's a small reproducer:
> 
>       alx@debian:~/tmp$ cat dot.man 
>       .TH dot 7 2024-02-16 dots-in-SS
>       .SH Foo
>       .SS . and ..
>       \&. and .. are special files.
>       alx@debian:~/tmp$ groff -man -Tutf8 dot.man >/dev/null
>       alx@debian:~/tmp$ groff -man -Tps dot.man >/dev/null
>       alx@debian:~/tmp$ groff -man -Tpdf dot.man >/dev/null
>       troff:dot.man:3: warning: macro 'and' not defined (possibly missing 
> space after 'an')


I can reproduce this with groff 1.23.0 and Git HEAD.

I believe the problem happens because this `nop` request is taking place
inside a diversion (a "box" diversion, to be precise).  Consequently when the
diversion is later interpolated, it can include macro calls or requests, so
the formatter recognizes the control character at the beginning of the
(interpolated) input line.  This causes the PDF bookmarks that are
automatically constructed from the (sub)section heading texts to be
susceptible to misinterpretation.  If you check the PDF generated from your
reproducer, you will see that the corresponding bookmark for the subsection is
absent.

The solution is to prevent a potential control character that starts the
(sub)section heading text from appearing at the beginning of the
(interpolated) input line.

Thus we need a dummy character prefix.

Proposed fix:


diff --git a/tmac/pdf.tmac b/tmac/pdf.tmac
index 54175434f..fe12d35da 100644
--- a/tmac/pdf.tmac
+++ b/tmac/pdf.tmac
@@ -253,7 +253,7 @@ .de pdfbookmark
 .         tr \[em]-
 .         nf
 .         box pdf:clean
-.         nop \\$*
+.         nop \&\\$*
 .         fl
 .         box
 .         chop pdf:clean









    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?65320>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]