diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableUpdateJob.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableUpdateJob.java index 84260e4163..dce1b0641b 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableUpdateJob.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/table/threaded/TableUpdateJob.java @@ -522,11 +522,16 @@ public class TableUpdateJob { Comparator comparator = newSortContext.getComparator(); Comparator monitoredComparator = new MonitoredComparator<>(comparator, monitor, size); + + // copy the data. If the sort is cancelled, the data could be corrupted + List copy = new ArrayList<>(data); try { Collections.sort(data, monitoredComparator); } catch (SortCancelledException e) { - // do nothing, the old data will remain + // restore copy as data could be corrupted + data.clear(); + data.addAll(copy); } catch (Exception e) { // We added this to catch an issue if the sort comparators violate the contract of @@ -534,6 +539,9 @@ public class TableUpdateJob { // throw the exception. This will allow the currently loaded data to be used, albeit // unsorted. Msg.error(this, "Unable to finish table sorting", e); + // restore copy as data could be corrupted + data.clear(); + data.addAll(copy); } monitor.setMessage("Done sorting");