diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-03-21 13:26:01 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-03-21 13:40:52 +0300 |
commit | 33f71654136014bac094babaaa81d91245fdd24c (patch) | |
tree | 2090722fc330ded11fb00321a8afd7e0e81bafaa /src/qreg.c | |
parent | 121cca61bedf24ba428e019f23b3bbb7160ce162 (diff) | |
download | sciteco-33f71654136014bac094babaaa81d91245fdd24c.tar.gz |
fixed rubout of Q-Register specifications
* This was a regression introduced by 257a0bf128e109442dce91c4aaa1d97fed17ad1a.
* The undo token that frees newly allocated teco_machine_qregspec_t must actually
reset the pointer as well since any subsequent token, pushed by teco_undo_qregspec_own(),
will expect a valid pointer.
* Could have been done via
ctx->expectqreg = NULL;
teco_undo_qregspec_own(ctx->expectqreg);
but using a special clear function requires less memory and is easier to understand.
* Added test case. This wouldn't always crash, but should definitely show up in Valgrind.
Diffstat (limited to 'src/qreg.c')
-rw-r--r-- | src/qreg.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -1715,5 +1715,12 @@ teco_machine_qregspec_free(teco_machine_qregspec_t *ctx) g_free(ctx); } -TECO_DEFINE_UNDO_CALL(teco_machine_qregspec_free, teco_machine_qregspec_t *); +static inline void +teco_machine_qregspec_clear(teco_machine_qregspec_t **ctx) +{ + teco_machine_qregspec_free(*ctx); + *ctx = NULL; +} + +TECO_DEFINE_UNDO_CALL(teco_machine_qregspec_clear, teco_machine_qregspec_t **); TECO_DEFINE_UNDO_OBJECT_OWN(qregspec, teco_machine_qregspec_t *, teco_machine_qregspec_free); |