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:
Daniel Eklöf 2023-01-15 10:24:01 +01:00
parent ffaf08e07c
commit 09f3475ad1
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 6 additions and 0 deletions

View file

@ -116,12 +116,15 @@
config values (e.g. letter offsets, line height etc).
* Selection being stuck visually when `IL` and `DL`.`
* 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
[1190]: https://codeberg.org/dnkl/foot/issues/1190
[1205]: https://codeberg.org/dnkl/foot/issues/1205
[1209]: https://codeberg.org/dnkl/foot/issues/1209
[1218]: https://codeberg.org/dnkl/foot/issues/1218
[1259]: https://codeberg.org/dnkl/foot/issues/1259
### Security

View file

@ -1477,6 +1477,9 @@ parse_section_csd(struct context *ctx)
static void
free_binding_aux(struct binding_aux *aux)
{
if (!aux->master_copy)
return;
switch (aux->type) {
case BINDING_AUX_NONE: break;
case BINDING_AUX_PIPE: free_argv(&aux->pipe); break;