From 30b25a39a7d40a595c90a8833bada88724dfcbe1 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 20 Feb 2025 10:34:59 +0100 Subject: [PATCH] fix: Crash when closing provider that's open in the diff view --- .../source/content/views/view_diff.cpp | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/plugins/diffing/source/content/views/view_diff.cpp b/plugins/diffing/source/content/views/view_diff.cpp index 316c64c80..bfddf8bb8 100644 --- a/plugins/diffing/source/content/views/view_diff.cpp +++ b/plugins/diffing/source/content/views/view_diff.cpp @@ -122,6 +122,7 @@ namespace hex::plugin::diffing { column.provider = -1; column.hexEditor.setSelectionUnchecked(std::nullopt, std::nullopt); column.diffTree.clear(); + column.differences.clear(); } } @@ -354,32 +355,34 @@ namespace hex::plugin::diffing { // Draw changes ImGui::TableNextColumn(); ImGui::Indent(); - switch (typeA) { - case DifferenceType::Insertion: - data.resize(std::min(17, (regionA.end - regionA.start) + 1)); - providers[a.provider]->read(regionA.start, data.data(), data.size()); - drawByteString(data); - break; - case DifferenceType::Mismatch: - data.resize(std::min(17, (regionA.end - regionA.start) + 1)); - providers[a.provider]->read(regionA.start, data.data(), data.size()); - drawByteString(data); + if (a.provider != -1 && b.provider != -1) { + switch (typeA) { + case DifferenceType::Insertion: + data.resize(std::min(17, (regionA.end - regionA.start) + 1)); + providers[a.provider]->read(regionA.start, data.data(), data.size()); + drawByteString(data); + break; + case DifferenceType::Mismatch: + data.resize(std::min(17, (regionA.end - regionA.start) + 1)); + providers[a.provider]->read(regionA.start, data.data(), data.size()); + drawByteString(data); - ImGui::SameLine(0, 0); - ImGuiExt::TextFormatted(" {} ", ICON_VS_ARROW_RIGHT); - ImGui::SameLine(0, 0); + ImGui::SameLine(0, 0); + ImGuiExt::TextFormatted(" {} ", ICON_VS_ARROW_RIGHT); + ImGui::SameLine(0, 0); - data.resize(std::min(17, (regionB.end - regionB.start) + 1)); - providers[b.provider]->read(regionB.start, data.data(), data.size()); - drawByteString(data); - break; - case DifferenceType::Deletion: - data.resize(std::min(17, (regionB.end - regionB.start) + 1)); - providers[b.provider]->read(regionB.start, data.data(), data.size()); - drawByteString(data); - break; - default: - break; + data.resize(std::min(17, (regionB.end - regionB.start) + 1)); + providers[b.provider]->read(regionB.start, data.data(), data.size()); + drawByteString(data); + break; + case DifferenceType::Deletion: + data.resize(std::min(17, (regionB.end - regionB.start) + 1)); + providers[b.provider]->read(regionB.start, data.data(), data.size()); + drawByteString(data); + break; + default: + break; + } } ImGui::Unindent();