Update of bug #68340 (group groff):
Status: In Progress => Fixed
Open/Closed: Open => Closed
_______________________________________________________
Follow-up Comment #2:
commit fb2432fe60225d6c34e43b630e67cbc1c24e61d5
Author: G. Branden Robinson <[email protected]>
Date: Sun May 17 14:32:33 2026 -0500
[troff]: Remove heap-overreading optimization.
* src/roff/troff/input.cpp (char_list::get): De-optimize read access at
the end of a `char_list`, because the pointer arithmetic used can
access heap storage beyond the end of the underlying `char_block` used
to house the list.
Fixes <https://savannah.gnu.org/bugs/?68340>. Resolves ASAN runtime
error when formatting the groff_mdoc(7) man page in troff mode. Thanks
to Bjarni Ingi Gislason for the report.
Performance analysis
====================
This change slows groff pipline operation by about 5% across the corpus
of documents produced in its own build. If someone would like to craft
a new, more memory-safe optimization to recover the performance, please
contact the groff at gnu dot org mailing list and share your proposal.
(A better long-term fix might be to migrate `char_list` to an ISO C++98
STL templated container type; these are often performance-tuned already
by the compiler vendor.)
$ cat measure.bash
shopt -s extglob
make -C build -j >/dev/null 2>&1
for n in $(seq 20)
do
rm -f build/doc/!(groff).pdf build/doc/*.ps \
build/doc/!(groff).html \
build/contrib/hdtbl/examples/*.ps \
build/contrib/mom/examples/*.pdf \
contrib/sboxes/msboxes.pdf \
doc/groff-man-pages.utf8.txt
t=$({ time -p make -C build >/dev/null 2>&1; } 2>/dev/stdout)
echo "$t" | awk '/real/ { print $2; }'
done
Before
------
$ bash ./measure.bash | tee | datamash range 1 mean 1 sstdev 1
0.86 31.9025 0.24063239052218
After
-----
$ bash ./measure.bash | tee | datamash range 1 mean 1 sstdev 1
6.91 33.545 1.8817363202498
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?68340>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
signature.asc
Description: PGP signature
