From d98aa6ffc332468521731f7459da5944a287c4e0 Mon Sep 17 00:00:00 2001 From: ghidra007 Date: Tue, 6 Jan 2026 17:22:02 +0000 Subject: [PATCH] GP-6286 added check for empty array --- .../RTTIWindowsClassRecoverer.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIWindowsClassRecoverer.java b/Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIWindowsClassRecoverer.java index 4495c7538e..d775f045d0 100644 --- a/Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIWindowsClassRecoverer.java +++ b/Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/RTTIWindowsClassRecoverer.java @@ -2381,19 +2381,23 @@ public class RTTIWindowsClassRecoverer extends RTTIClassRecoverer { Map classOffsetToVftableMap = recoveredClass.getClassOffsetToVftableMap(); Set classVftableOffsets = classOffsetToVftableMap.keySet(); - List sortedOffsets = new ArrayList(classVftableOffsets); - Collections.sort(sortedOffsets); - Integer offset = sortedOffsets.get(0); + if (!classVftableOffsets.isEmpty()) { - Address vftableAddress = classOffsetToVftableMap.get(offset); + List sortedOffsets = new ArrayList(classVftableOffsets); + Collections.sort(sortedOffsets); - DataType classVftablePointer = vfPointerDataTypes.get(vftableAddress); + Integer offset = sortedOffsets.get(0); - // if it fits at offset or is at the end and class structure can be grown, - // copy the whole baseClass structure to the class Structure at the given offset - EditStructureUtils.addDataTypeToStructure(classStructureDataType, offset.intValue(), - classVftablePointer, CLASS_VTABLE_PTR_FIELD_EXT, monitor); + Address vftableAddress = classOffsetToVftableMap.get(offset); + + DataType classVftablePointer = vfPointerDataTypes.get(vftableAddress); + + // if it fits at offset or is at the end and class structure can be grown, + // copy the whole baseClass structure to the class Structure at the given offset + EditStructureUtils.addDataTypeToStructure(classStructureDataType, offset.intValue(), + classVftablePointer, CLASS_VTABLE_PTR_FIELD_EXT, monitor); + } } // add the vbtable structure for single inheritance/virt parent case