From cbbad2b636f671eacf158b0c590cdb4da49aa901 Mon Sep 17 00:00:00 2001 From: Xusheng Date: Thu, 14 May 2026 11:42:56 -0400 Subject: [PATCH] Add missing m_rspConnector null checks in WriteMemory and TTD call query MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three publicly-callable adapter methods unconditionally dereferenced m_rspConnector while every sibling method in the same class already guarded the access: - GdbAdapter::WriteMemory - EsrevenAdapter::WriteMemory - EsrevenAdapter::GetTTDCallsForSymbols These are the same shape as the crashes in #1066 and #1071 — a user selects the adapter from the UI without connecting to a backend, then triggers a write or a TTD query, and we deref null. Mirror the existing guard so the methods return an empty result instead. Co-Authored-By: Claude Opus 4.7 (1M context) --- core/adapters/esrevenadapter.cpp | 5 ++++- core/adapters/gdbadapter.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/adapters/esrevenadapter.cpp b/core/adapters/esrevenadapter.cpp index c55084e8..38a5be5d 100644 --- a/core/adapters/esrevenadapter.cpp +++ b/core/adapters/esrevenadapter.cpp @@ -1129,7 +1129,7 @@ DataBuffer EsrevenAdapter::ReadMemory(std::uintptr_t address, std::size_t size) bool EsrevenAdapter::WriteMemory(std::uintptr_t address, const DataBuffer& buffer) { - if (m_isTargetRunning) + if (m_isTargetRunning || !m_rspConnector) return false; size_t size = buffer.GetLength(); @@ -2926,6 +2926,9 @@ std::vector EsrevenAdapter::GetTTDCallsForSymbols(const std::strin return events; } + if (!m_rspConnector) + return events; + // Get settings auto adapterSettings = GetAdapterSettings(); BNSettingsScope scope = SettingsResourceScope; diff --git a/core/adapters/gdbadapter.cpp b/core/adapters/gdbadapter.cpp index e60e3619..161d4673 100644 --- a/core/adapters/gdbadapter.cpp +++ b/core/adapters/gdbadapter.cpp @@ -725,7 +725,7 @@ DataBuffer GdbAdapter::ReadMemory(std::uintptr_t address, std::size_t size) bool GdbAdapter::WriteMemory(std::uintptr_t address, const DataBuffer& buffer) { - if (m_isTargetRunning) + if (m_isTargetRunning || !m_rspConnector) return false; size_t size = buffer.GetLength();