Support symbol strings with '_' in place of '+'

This fixes a segfault that occurs for the following reason:

 - In XKeyboard::initializeXkb(), the XkbSymbolParser::parse() is called
   with three arguments - string to process (symName),
   vector to push symbol names to (_symbolNames)
   and vector to push variant names to (_variantNames).

 - In XkbSymbolParser::parse(), it looks for char '+' in symName string,
   but Xkb may use '_' instead when creating that string. If the char
   is not found, parse() doesn't append anything to vectors and they
   remain empty.

 - Later, XKeyboard::initializeXkb() tries to access nonexistent data in
   _symbolNames, which causes a segmentation fault (on lines 162-163).
This commit is contained in:
selurvedu 2015-07-20 00:25:46 +03:00
parent 552ba9856f
commit 58fa6eb1f9
1 changed files with 1 additions and 1 deletions

View File

@ -327,7 +327,7 @@ void XkbSymbolParser::parse(const std::string& symbols, StringVector& symbolList
for (size_t i = 0; i < symbols.size(); i++) {
char ch = symbols[i];
if (ch == '+') {
if (ch == '+' || ch == '_') {
if (inSymbol) {
if (isXkbLayoutSymbol(curSymbol)) {
symbolList.push_back(curSymbol);