Package: xevil
Version: 2.02r2-9
Tags: patch
xevil does not always read X resources correctly for the definition of keyboard
mappings. This is because of the use of invalid memory in the routine
Game::process_x_resources(). The "option" char pointer points to memory
provided by a temporary string object that has gone out of scope when "option"
is used. This bug is only noticeable for certain implementations of STL on the
compiler platform. Here is a suggested fix:
--- a/cmn/game.cpp
+++ b/cmn/game.cpp
@@ -2254,10 +2254,10 @@ void Game::process_x_resources(int *,char **)
strm << "right_" << keysNames[n];
else
strm << "right_" << keysNames[n] << "_2";
- const char *option = strm.str().c_str();
+ string option = strm.str();
// Should we free value??
- char *value = XGetDefault(ui->get_dpy(0),XEVIL_CLASS,option);
+ char *value =
XGetDefault(ui->get_dpy(0),XEVIL_CLASS,option.c_str());
if (value) {
KeySym keysym = XStringToKeysym(value);
if (keysym != NoSymbol)
@@ -2273,10 +2273,10 @@ void Game::process_x_resources(int *,char **)
strm << "left_" << keysNames[n];
else
strm << "left_" << keysNames[n] << "_2";
- const char *option = strm.str().c_str();
+ string option = strm.str();
// Should we free value??
- char *value = XGetDefault(ui->get_dpy(0),XEVIL_CLASS,option);
+ char *value =
XGetDefault(ui->get_dpy(0),XEVIL_CLASS,option.c_str());
if (value) {
KeySym keysym = XStringToKeysym(value);
if (keysym != NoSymbol)