gbranden pushed a commit to branch master
in repository groff.
commit 8f33603941602416cdb5cd0af1706a62f99d4567
Author: G. Branden Robinson <[email protected]>
AuthorDate: Thu Jul 10 15:32:01 2025 -0500
[libgroff]: Handle ludicrously long input lines.
* src/libs/libgroff/font.cpp (text_file::next_line): Handle ludicrously
long input line lengths by diagnosing the problem and cleanly
aborting.
Exhibit:
$ rm build/font/devps/DESC
$ make -C build font/devps/DESC
[output elided]
$ printf 'papersize ' >> build/font/devps/DESC
$ dd if=/dev/zero of=/dev/stdout bs=1M count=8192 \
| tr '\0' '@' >> build/font/devps/DESC
[output elided]
$ printf '\n' >> build/font/devps/DESC
$ echo . | ./build/test-groff
.../build/groff:.../build/font/devps/DESC:15: fatal error: line length
exceeds 1073741824 bytes; aborting
---
ChangeLog | 6 ++++++
src/libs/libgroff/font.cpp | 8 ++++++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 8ec27469f..711afa5e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-07-10 G. Branden Robinson <[email protected]>
+
+ * src/libs/libgroff/font.cpp (text_file::next_line): Handle
+ ludicrously long input line lengths by diagnosing the problem
+ and cleanly aborting.
+
2025-07-10 G. Branden Robinson <[email protected]>
* src/libs/libgroff/font.cpp (text_file::next_line): Trivially
diff --git a/src/libs/libgroff/font.cpp b/src/libs/libgroff/font.cpp
index ce1907756..35564338a 100644
--- a/src/libs/libgroff/font.cpp
+++ b/src/libs/libgroff/font.cpp
@@ -127,11 +127,15 @@ bool text_file::next_line()
error("invalid input character code %1", int(c));
else {
if (length + 1 >= linebufsize) {
+ int newbufsize = linebufsize * 2;
+ if (newbufsize < 0) // integer multiplication wrapped
+ fatal("line length exceeds %1 bytes; aborting",
+ linebufsize);
char *old_buf = buf;
- buf = new char[linebufsize * 2];
+ buf = new char[newbufsize];
memcpy(buf, old_buf, linebufsize);
delete[] old_buf;
- linebufsize *= 2;
+ linebufsize = newbufsize;
}
buf[length++] = c;
if ('\n' == c)
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit