Fix crash when plugin_set_key_group() is called several times by plugins (#1426)
commit2707006286fa52400776c24ad6c393d2459324fa
authorJiří Techet <techet@gmail.com>
Sat, 15 Apr 2017 10:48:03 +0000 (15 12:48 +0200)
committerelextr <elextr@gmail.com>
Sat, 15 Apr 2017 10:48:03 +0000 (15 20:48 +1000)
tree5965770719e0c1748ab52b7e190e6371a3402eab
parent5539c3f908f9957ac2a181e38b3d10e392a0e551
Fix crash when plugin_set_key_group() is called several times by plugins (#1426)

When plugin calls plugin_set_key_group() several times for the same
group (when creating keybindings dynamically and needs to reset them),
it crashes with the current code the second time it gets called.

The reason is that group->plugin_keys is an array into which entries of
group->key_items point and when calling

g_ptr_array_set_size(group->key_items, 0);

it calls free_key_binding() for every item - when these items are
deallocated by g_free(group->plugin_keys) previously, calls of
free_key_binding() reference an invalid memory.

Just first resizing group->key_items (and calling free_key_binding() for
its items) and freeing group->plugin_keys afterwards fixes the problem.
src/keybindings.c