mirror of
https://github.com/libretro/scummvm.git
synced 2025-04-02 06:41:51 +00:00
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
@ -32,6 +32,8 @@
|
||||
#include "common/system.h"
|
||||
#include "common/keyboard.h"
|
||||
|
||||
#define KEYSTATES_ARRAY_SIZE (Common::KEYCODE_UNDO + 1) // Hardcoded size for the common/keyboard.h enum
|
||||
|
||||
namespace Wintermute {
|
||||
|
||||
IMPLEMENT_PERSISTENT(BaseKeyboardState, false)
|
||||
@ -46,8 +48,8 @@ BaseKeyboardState::BaseKeyboardState(BaseGame *inGame) : BaseScriptable(inGame)
|
||||
_currentAlt = false;
|
||||
_currentControl = false;
|
||||
|
||||
_keyStates = new uint8[323]; // Hardcoded size for the common/keyboard.h enum
|
||||
for (int i = 0; i < 323; i++) {
|
||||
_keyStates = new uint8[KEYSTATES_ARRAY_SIZE];
|
||||
for (int i = 0; i < KEYSTATES_ARRAY_SIZE; i++) {
|
||||
_keyStates[i] = false;
|
||||
}
|
||||
}
|
||||
@ -499,7 +501,7 @@ Common::KeyCode BaseKeyboardState::vKeyToKeyCode(uint32 vkey) {
|
||||
return Common::KEYCODE_SCROLLOCK;
|
||||
default:
|
||||
warning("Unknown VKEY: %d", vkey);
|
||||
return (Common::KeyCode)vkey;
|
||||
return (Common::KeyCode)(vkey < KEYSTATES_ARRAY_SIZE ? vkey : 0);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user