mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-03 07:15:29 -04:00
config: don’t double-free key binding auxiliary data
Key bindings with multiple key mappings share auxiliary data (e.g. the command to execute in pipe-* bindings, or the escape sequence in text-bindings). The first one is the designated “master” copy. Only that one should be freed. This fixed a double-free on exit, with e.g. [text-bindings] \x1b\x23=Mod4+space Mod4+equal Closes #1259
This commit is contained in:
parent
ffaf08e07c
commit
09f3475ad1
2 changed files with 6 additions and 0 deletions
|
|
@ -116,12 +116,15 @@
|
||||||
config values (e.g. letter offsets, line height etc).
|
config values (e.g. letter offsets, line height etc).
|
||||||
* Selection being stuck visually when `IL` and `DL`.`
|
* Selection being stuck visually when `IL` and `DL`.`
|
||||||
* URL underlines sometimes still being visible after exiting URL mode.
|
* URL underlines sometimes still being visible after exiting URL mode.
|
||||||
|
* Text-bindings, and pipe-* bindings, with multiple key mappings
|
||||||
|
causing a crash (double-free) on exit ([#1259][1259]).
|
||||||
|
|
||||||
[1173]: https://codeberg.org/dnkl/foot/issues/1173
|
[1173]: https://codeberg.org/dnkl/foot/issues/1173
|
||||||
[1190]: https://codeberg.org/dnkl/foot/issues/1190
|
[1190]: https://codeberg.org/dnkl/foot/issues/1190
|
||||||
[1205]: https://codeberg.org/dnkl/foot/issues/1205
|
[1205]: https://codeberg.org/dnkl/foot/issues/1205
|
||||||
[1209]: https://codeberg.org/dnkl/foot/issues/1209
|
[1209]: https://codeberg.org/dnkl/foot/issues/1209
|
||||||
[1218]: https://codeberg.org/dnkl/foot/issues/1218
|
[1218]: https://codeberg.org/dnkl/foot/issues/1218
|
||||||
|
[1259]: https://codeberg.org/dnkl/foot/issues/1259
|
||||||
|
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
|
||||||
3
config.c
3
config.c
|
|
@ -1477,6 +1477,9 @@ parse_section_csd(struct context *ctx)
|
||||||
static void
|
static void
|
||||||
free_binding_aux(struct binding_aux *aux)
|
free_binding_aux(struct binding_aux *aux)
|
||||||
{
|
{
|
||||||
|
if (!aux->master_copy)
|
||||||
|
return;
|
||||||
|
|
||||||
switch (aux->type) {
|
switch (aux->type) {
|
||||||
case BINDING_AUX_NONE: break;
|
case BINDING_AUX_NONE: break;
|
||||||
case BINDING_AUX_PIPE: free_argv(&aux->pipe); break;
|
case BINDING_AUX_PIPE: free_argv(&aux->pipe); break;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue