diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-10-20 07:00:03 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-10-20 07:00:03 -0700 |
commit | 68811c68c7342d7307b684313962edd105b88a83 (patch) | |
tree | 794093b25c85ad4f9a369a63cbeb205832f80135 /txr.1 | |
parent | b67f0c623feb14ff27e1c70ef192163dd31b8945 (diff) | |
download | txr-68811c68c7342d7307b684313962edd105b88a83.tar.gz txr-68811c68c7342d7307b684313962edd105b88a83.tar.bz2 txr-68811c68c7342d7307b684313962edd105b88a83.zip |
Check call graph circularity in circ_backpatch.
The circ_backpatch function could suffer runaway
recursion, so we must add a cycle check. This
could happen due to hitting cyclical objects
when traversing structs. Structs have static slots
that could contain cyclic objects, as well as
construction logic which can generate slots that
contain cycles and are not overridden by anything
in the literal.
* parser.c (circ_backpatch): Take struct circ_stack *
argument; extend the circ_stack in recursive calls.
Do circular check on entry.
(parser_resolve_circ): Pass null pointer as the
new stack argument to circ_backpatch.
Diffstat (limited to 'txr.1')
0 files changed, 0 insertions, 0 deletions