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:
parent
552ba9856f
commit
58fa6eb1f9
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue