gbranden pushed a commit to branch master
in repository groff.

commit 66a9b53ad965a5307b856eece2ebfab83ce1622a
Author: G. Branden Robinson <[email protected]>
AuthorDate: Tue Jun 4 22:10:29 2024 -0500

    [troff]: Keep garbage out of diagnostic messages.
    
    * src/roff/troff/input.cpp (interpolate_arg): Stop embedding
    unprintable input characters in messages diagnosing invalid
    syntax.
    
    See <https://lists.gnu.org/archive/html/groff/2024-05/msg00057.html> and
    follow-ups.
---
 ChangeLog                | 10 ++++++++++
 src/roff/troff/input.cpp | 19 +++++++++++++++----
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7c26b9030..98b8293ae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2024-06-04  G. Branden Robinson <[email protected]>
+
+       * src/roff/troff/input.cpp (interpolate_arg): Stop embedding
+       unprintable input characters in messages diagnosing invalid
+       syntax.
+
+       See
+       <https://lists.gnu.org/archive/html/groff/2024-05/msg00057.html>
+       and follow-ups.
+
 2024-05-16  G. Branden Robinson <[email protected]>
 
        * src/roff/troff/node.cpp (glyph_node::dump_node):
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
index 8d828a01e..596ecf6f9 100644
--- a/src/roff/troff/input.cpp
+++ b/src/roff/troff/input.cpp
@@ -4556,10 +4556,21 @@ static void interpolate_arg(symbol nm)
   }
   else {
     const char *p;
-    for (p = s; *p && csdigit(*p); p++)
-      ;
-    if (*p)
-      copy_mode_error("invalid positional argument number '%1'", s);
+    bool is_valid = true;
+    bool is_printable = true;
+    for (p = s; *p != 0 /* nullptr */; p++) {
+      if (!csdigit(*p))
+       is_valid = false;
+      if (!csprint(*p))
+       is_printable = false;
+    }
+    if (!is_valid) {
+      const char msg[] = "invalid positional argument number";
+      if (is_printable)
+       copy_mode_error("%1 '%2'", msg, s);
+      else
+       copy_mode_error("%1 (unprintable)", msg);
+    }
     else
       input_stack::push(input_stack::get_arg(atoi(s)));
   }

_______________________________________________
Groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to