diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-10-07 20:36:21 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-10-07 20:36:21 -0700 |
commit | ed9af7616e76f0a5111d3e5a56eb9d1d3025c1a6 (patch) | |
tree | 9f46e0eb81d232c91cd9e6ab6c16b10711dc7672 /struct.c | |
parent | d66820e7169ff436a1c622bb82877ada2a5b0c68 (diff) | |
download | txr-ed9af7616e76f0a5111d3e5a56eb9d1d3025c1a6.tar.gz txr-ed9af7616e76f0a5111d3e5a56eb9d1d3025c1a6.tar.bz2 txr-ed9af7616e76f0a5111d3e5a56eb9d1d3025c1a6.zip |
bug: heap backpointer assignment in static-slot-ensure.
* struct.c (static_slot_ens_rec): Neglected use of
set macro to store newval in freshly allocated slot,
which means we corrupt garbage collection if this
causes an old generation objet to point to a new
generation object.
Diffstat (limited to 'struct.c')
-rw-r--r-- | struct.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -987,10 +987,10 @@ static val static_slot_ens_rec(val stype, val sym, val newval, stsl = &st->stslot[st->nstslots]; if (inh_stsl == 0) { - stsl->store = newval; stsl->home_type = stype; stsl->home_offs = st->nstslots; stsl->home = &stsl->store; + set(stslot_loc(stsl), newval); if (!opt_compat || opt_compat > 151) inh_stsl = stsl; } else { |