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