]> granicus.if.org Git - graphviz/commit
fix incorrect allocation computation in strdup_and_subst_obj0
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 9 Aug 2020 23:48:30 +0000 (16:48 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 15 Aug 2020 17:21:22 +0000 (10:21 -0700)
commitfbefeb31989130c48b965cc9a2f0ad0cac07015c
treec58389d063db842ab83360f668edc554da7c90a8
parent2151ea4bd12d68bc82ee48c3de0f092d62483ddc
fix incorrect allocation computation in strdup_and_subst_obj0

The logic in this function does two passes through computing the construction of
a string, the first to determine how many bytes will be written and the second
to write those bytes. Unfortunately the logic in these two passes did not match,
and some cases would cause the first pass to underestimate how many bytes would
be written by the second pass. As a result, the second pass would overrun the
extent of allocated memory and begin writing out of bounds.

As far as I can tell, this bug has existed since at least 2010. I think this
code should be refactored in future to use a dynamically expanding string buffer
(e.g. agxbuf) instead of relying on this fragile pairing of logic.

The test case added in this commit was something found by Google Autofuzz
project that triggered a crash in Graphviz due to reading a NULL pointer. After
fixing the initial crash (the previous commit), this out of bounds write was
observable using ASan. This commit fixes #1676.
CHANGELOG.md
lib/common/labels.c
rtest/1676.dot [new file with mode: 0644]
rtest/test_regression.py