Qt: Add additional checks in CheatModel to prevent crashes (fixes #163)

This commit is contained in:
Jeffrey Pfau 2015-11-11 22:17:41 -08:00
parent f8ff96e051
commit cf0188b579
2 changed files with 10 additions and 2 deletions

View File

@ -14,6 +14,7 @@ Bugfixes:
- GBA Memory: Fix alignment of LDM/STM on SRAM - GBA Memory: Fix alignment of LDM/STM on SRAM
- GBA: Initialize uninitialized pristineRom and pristineRomSize members - GBA: Initialize uninitialized pristineRom and pristineRomSize members
- GBA Memory: Fix unaligned out-of-bounds ROM loads - GBA Memory: Fix unaligned out-of-bounds ROM loads
- Qt: Add additional checks in CheatModel to prevent crashes
Misc: Misc:
- GBA Audio: Implement missing flags on SOUNDCNT_X register - GBA Audio: Implement missing flags on SOUNDCNT_X register

View File

@ -42,6 +42,10 @@ QVariant CheatsModel::data(const QModelIndex& index, int role) const {
} }
} }
if (index.row() >= GBACheatSetsSize(&m_device->cheats)) {
return QVariant();
}
int row = index.row(); int row = index.row();
const GBACheatSet* cheats = *GBACheatSetsGetPointer(&m_device->cheats, index.row()); const GBACheatSet* cheats = *GBACheatSetsGetPointer(&m_device->cheats, index.row());
switch (role) { switch (role) {
@ -56,7 +60,7 @@ QVariant CheatsModel::data(const QModelIndex& index, int role) const {
} }
bool CheatsModel::setData(const QModelIndex& index, const QVariant& value, int role) { bool CheatsModel::setData(const QModelIndex& index, const QVariant& value, int role) {
if (!index.isValid() || index.parent().isValid()) { if (!index.isValid() || index.parent().isValid() || index.row() > GBACheatSetsSize(&m_device->cheats)) {
return false; return false;
} }
@ -139,11 +143,14 @@ GBACheatSet* CheatsModel::itemAt(const QModelIndex& index) {
if (index.parent().isValid()) { if (index.parent().isValid()) {
return static_cast<GBACheatSet*>(index.internalPointer()); return static_cast<GBACheatSet*>(index.internalPointer());
} }
if (index.row() >= GBACheatSetsSize(&m_device->cheats)) {
return nullptr;
}
return *GBACheatSetsGetPointer(&m_device->cheats, index.row()); return *GBACheatSetsGetPointer(&m_device->cheats, index.row());
} }
void CheatsModel::removeAt(const QModelIndex& index) { void CheatsModel::removeAt(const QModelIndex& index) {
if (!index.isValid() || index.parent().isValid()) { if (!index.isValid() || index.parent().isValid() || index.row() >= GBACheatSetsSize(&m_device->cheats)) {
return; return;
} }
int row = index.row(); int row = index.row();