symbols: avoid possible access-out-of-bound due to explicit_group
authorRan Benita <ran234@gmail.com>
Sun, 23 Sep 2012 19:15:34 +0000 (21:15 +0200)
committerDaniel Stone <daniel@fooishbar.org>
Sun, 23 Sep 2012 23:13:32 +0000 (09:13 +1000)
commit79bbf6f758ecf74e9eae86b12832adfe6fcc0a48
tree69af4a15ebf26389dfd2bec7dafd3863e1b69ab9
parent6d97d0ce5e2d96f97038a153599cee8a46b7042f
symbols: avoid possible access-out-of-bound due to explicit_group

The code that handles group name statements currently does this:
    info->group_names[grp - 1 + info->explicit_group] = name;
Other than the fact that this addition makes no sense, it actually can
reach out of the bounds of the array (which is of size XKB_NUM_GROUPS)
in the (non-realistic) case where (grp - 1) is not 0 (i.e. the statement
is not name[Group1] = "foo").

We also change explicit_group to be XKB_LAYOUT_INVALID if not set
otherwise, instead of initializing it to 0; this is clearer and if
someone happens to write 'us:1' for some reason, it will discard the
other groups in the file as it should.

This entire explicit_group thing was clearly bolted on as an
afterthought.

Signed-off-by: Ran Benita <ran234@gmail.com>
src/xkbcomp/symbols.c