gbranden pushed a commit to branch master
in repository groff.
commit 36e7af47a23de3ee62f9f482112500004837b478
Author: G. Branden Robinson <[email protected]>
AuthorDate: Tue Jun 3 03:31:23 2025 -0500
[troff]: Add `ft` warning diagnostic.
* src/roff/troff/env.cpp (select_font): Emit warning diagnostic in
"range" when the `ft` request is given an out-of-range mounting
position.
Illustration:
Formerly (with groff 1.23.0 and earlier):
$ groff -ww
.ft
.ft P
.ft bogus
troff:<standard input>:3: warning: cannot select font 'bogus'
.ft -1
troff:<standard input>:4: warning: cannot select font '-1'
.ft 0
troff:<standard input>:5: warning: no font mounted at position 0
.ft 1
.ft 2147483647
troff:<standard input>:7: warning: no font mounted at position 2147483647
.ft 2147483648
troff:<standard input>:8: warning: no font mounted at position -2147483648
.ft 9999999999
troff:<standard input>:9: warning: no font mounted at position 1410065407
Now:
$ groff -ww
.ft
.ft P
.ft bogus
troff:<standard input>:3: warning: cannot select font 'bogus'
.ft -1
troff:<standard input>:4: warning: font mounting position must be in range
0..2147483647, got -1
.ft 0
troff:<standard input>:5: warning: no font mounted at position 0
.ft 1
.ft 2147483647
troff:<standard input>:7: warning: no font mounted at position 2147483647
.ft 2147483648
troff:<standard input>:8: warning: font mounting position must be in range
0..2147483647, got 2147483648
.ft 9999999999
troff:<standard input>:1: warning: font mounting position must be in range
0..2147483647, got 9999999999
---
ChangeLog | 6 ++++++
src/roff/troff/env.cpp | 19 ++++++++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a02c20664..3791807d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-06-03 G. Branden Robinson <[email protected]>
+
+ * src/roff/troff/env.cpp (select_font): Emit warning diagnostic
+ in "range" when the `ft` request is given an out-of-range
+ mounting position.
+
2025-06-02 Deri James <[email protected]>
* src/utils/afmtodit/afmtodit.pl: Fix logic error; when falling
diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp
index 529f79968..71801838d 100644
--- a/src/roff/troff/env.cpp
+++ b/src/roff/troff/env.cpp
@@ -1282,9 +1282,11 @@ static void select_font()
if (s == P_symbol)
is_number = false;
else {
- for (const char *p = s.contents();
- p != 0 /* nullptr */ && *p != '\0';
- p++)
+ const char *p = s.contents();
+ assert(*p != 0 /* nullptr */);
+ if ((csdigit(*p)) || ('-' == *p))
+ p++;
+ for (; p != 0 /* nullptr */ && *p != '\0'; p++)
if (!csdigit(*p)) {
is_number = false;
break;
@@ -1292,8 +1294,15 @@ static void select_font()
}
// environment::set_font warns if a bogus mounting position is
// requested. We must warn here if a bogus font name is selected.
- if (is_number)
- (void) curenv->set_font(atoi(s.contents()));
+ if (is_number) {
+ errno = 0;
+ long val = strtol(s.contents(), NULL, 10);
+ if ((ERANGE == errno) || (val > INT_MAX) || (val < 0))
+ warning(WARN_RANGE, "font mounting position must be in range"
+ " 0..%1, got %2", INT_MAX, s.contents());
+ else
+ (void) curenv->set_font(int(val));
+ }
else {
if (s == "DESC")
error("'%1' is not a valid font name", s.contents());
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit