all repos — mgba @ 34ec93670ad408ae195bc376c6f692c0023c1d26

mGBA Game Boy Advance Emulator

Qt: Fix out of bounds keys and saving null maps
Vicki Pfau vi@endrift.com
Fri, 07 Apr 2017 16:56:15 -0700
commit

34ec93670ad408ae195bc376c6f692c0023c1d26

parent

10da73fcaf282b99736056a6bffb99c2f12778ba

1 files changed, 12 insertions(+), 0 deletions(-)

jump to
M src/platform/qt/InputController.cppsrc/platform/qt/InputController.cpp

@@ -184,6 +184,9 @@ }

void InputController::saveConfiguration(uint32_t type) { for (auto& inputMap : m_inputMaps) { + if (!inputMap.info) { + continue; + } mInputMapSave(&inputMap, type, m_config->input()); } m_config->write();

@@ -445,6 +448,9 @@ return activeAxes;

} void InputController::bindKey(mPlatform platform, uint32_t type, int key, int coreKey) { + if (m_inputMaps.find(platform) == m_inputMaps.end() || coreKey >= m_inputMaps[platform].info->nKeys) { + return; + } QModelIndex index = m_inputModel->index(coreKey, 0, m_inputMenuIndices[platform]); bool signalsBlocked = m_inputModel->blockSignals(true); if (type != KEYBOARD) {

@@ -457,6 +463,9 @@ mInputBindKey(&m_inputMaps[platform], type, key, coreKey);

} void InputController::bindAxis(mPlatform platform, uint32_t type, int axis, GamepadAxisEvent::Direction direction, int key) { + if (m_inputMaps.find(platform) == m_inputMaps.end() || key >= m_inputMaps[platform].info->nKeys) { + return; + } QModelIndex index = m_inputModel->index(key, 0, m_inputMenuIndices[platform]); bool signalsBlocked = m_inputModel->blockSignals(true); m_inputModel->updateAxis(index, axis, direction);

@@ -520,6 +529,9 @@ return activeHats;

} void InputController::bindHat(mPlatform platform, uint32_t type, int hat, GamepadHatEvent::Direction direction, int coreKey) { + if (m_inputMaps.find(platform) == m_inputMaps.end() || coreKey >= m_inputMaps[platform].info->nKeys) { + return; + } QModelIndex index = m_inputModel->index(coreKey, 0, m_inputMenuIndices[platform]); //m_inputModel->updateHat(index, hat, direction);