WINTERMUTE: Check keyboard state array index
vKeyToKeyCode() method was unsafe if vkey >= KEYSTATES_ARRAY_SIZE was provided, fixed
This commit is contained in:
parent
52b4206771
commit
e97b1e560d
1 changed files with 5 additions and 3 deletions
|
@ -32,6 +32,8 @@
|
||||||
#include "common/system.h"
|
#include "common/system.h"
|
||||||
#include "common/keyboard.h"
|
#include "common/keyboard.h"
|
||||||
|
|
||||||
|
#define KEYSTATES_ARRAY_SIZE (Common::KEYCODE_UNDO + 1) // Hardcoded size for the common/keyboard.h enum
|
||||||
|
|
||||||
namespace Wintermute {
|
namespace Wintermute {
|
||||||
|
|
||||||
IMPLEMENT_PERSISTENT(BaseKeyboardState, false)
|
IMPLEMENT_PERSISTENT(BaseKeyboardState, false)
|
||||||
|
@ -46,8 +48,8 @@ BaseKeyboardState::BaseKeyboardState(BaseGame *inGame) : BaseScriptable(inGame)
|
||||||
_currentAlt = false;
|
_currentAlt = false;
|
||||||
_currentControl = false;
|
_currentControl = false;
|
||||||
|
|
||||||
_keyStates = new uint8[323]; // Hardcoded size for the common/keyboard.h enum
|
_keyStates = new uint8[KEYSTATES_ARRAY_SIZE];
|
||||||
for (int i = 0; i < 323; i++) {
|
for (int i = 0; i < KEYSTATES_ARRAY_SIZE; i++) {
|
||||||
_keyStates[i] = false;
|
_keyStates[i] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -499,7 +501,7 @@ Common::KeyCode BaseKeyboardState::vKeyToKeyCode(uint32 vkey) {
|
||||||
return Common::KEYCODE_SCROLLOCK;
|
return Common::KEYCODE_SCROLLOCK;
|
||||||
default:
|
default:
|
||||||
warning("Unknown VKEY: %d", vkey);
|
warning("Unknown VKEY: %d", vkey);
|
||||||
return (Common::KeyCode)vkey;
|
return (Common::KeyCode)(vkey < KEYSTATES_ARRAY_SIZE ? vkey : 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue