diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2024-09-18 12:32:16 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2024-09-18 12:32:16 +0200 |
commit | b7b98405089e69dfae0fc11e2a423860f50756e9 (patch) | |
tree | b789182370dc4493d040dafb0bc932f69fbbd3c4 /src/qreg-commands.c | |
parent | dc417a890ad48e28e573770f2ae980af002e93cb (diff) | |
download | sciteco-b7b98405089e69dfae0fc11e2a423860f50756e9.tar.gz |
check that local register is not edited at the end of macro calls
* This was unsafe and could easily result in crashes, since teco_qreg_current
would afterwards point to an already freed Q-Register.
* Since automatically editing another register or buffer is not easy to do right,
we throw an error instead.
Diffstat (limited to 'src/qreg-commands.c')
-rw-r--r-- | src/qreg-commands.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/qreg-commands.c b/src/qreg-commands.c index 8d28e7d..a96eb5f 100644 --- a/src/qreg-commands.c +++ b/src/qreg-commands.c @@ -652,8 +652,15 @@ teco_state_macro_got_register(teco_machine_main_t *ctx, teco_qreg_t *qreg, } else { g_auto(teco_qreg_table_t) table; teco_qreg_table_init(&table, FALSE); + if (!teco_qreg_execute(qreg, &table, error)) return NULL; + if (teco_qreg_current && !teco_qreg_current->must_undo) { + /* currently editing local Q-Register */ + teco_error_editinglocalqreg_set(error, teco_qreg_current->head.name.data, + teco_qreg_current->head.name.len); + return NULL; + } } return &teco_state_start; |