diff --git a/Core/Debugger/MemBlockInfo.cpp b/Core/Debugger/MemBlockInfo.cpp index f727d3a484..0f6be382bf 100644 --- a/Core/Debugger/MemBlockInfo.cpp +++ b/Core/Debugger/MemBlockInfo.cpp @@ -288,7 +288,12 @@ void MemSlabMap::Clear() { MemSlabMap::Slab *MemSlabMap::FindSlab(uint32_t addr) { // Jump ahead using our index. - Slab *slab = heads_[addr / SLICE_SIZE]; + size_t slabIndex = addr / SLICE_SIZE; + if (slabIndex >= heads_.size()) { + // Shouldn't happen, but apparently can. + return nullptr; + } + Slab *slab = heads_[slabIndex]; // We often move forward, so check the last find. if (lastFind_->start > slab->start && lastFind_->start <= addr) slab = lastFind_; diff --git a/Windows/Debugger/Debugger_Lists.cpp b/Windows/Debugger/Debugger_Lists.cpp index 8e65ea2770..c5f2a67b51 100644 --- a/Windows/Debugger/Debugger_Lists.cpp +++ b/Windows/Debugger/Debugger_Lists.cpp @@ -672,7 +672,9 @@ bool CtrlStackTraceView::WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, L void CtrlStackTraceView::GetColumnText(wchar_t* dest, int row, int col) { - if (row < 0 || row >= (int)frames.size()) { + // We should have emptied the list if g_symbolMap is nullptr, but apparently we don't, + // so let's have a sanity check here. + if (row < 0 || row >= (int)frames.size() || !g_symbolMap) { return; }