From a7e39c151f28453dc7ed00cf3d20959a3061f277 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Fri, 26 Jun 2020 23:08:45 -0400 Subject: Fix crash on recursive structure --- ui/linearview.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ui/linearview.h b/ui/linearview.h index 62c0440a..fc3729a6 100644 --- a/ui/linearview.h +++ b/ui/linearview.h @@ -156,14 +156,15 @@ class BINARYNINJAUIAPI LinearView: public QAbstractScrollArea, public View, publ void ensureLineVisible(size_t line); TypeRef createStructure(BinaryNinja::QualifiedName& name, uint64_t size); - StructureRef defineInnerType(TypeRef type, TypeRef baseType, uint64_t offset, uint64_t size); - StructureRef defineInnerPointer(TypeRef type, ArchitectureRef arch, uint64_t baseAddress, uint64_t offset, uint64_t size); - StructureRef defineInnerStruct(TypeRef type, uint64_t offset, uint64_t size); - StructureRef defineInnerArray(TypeRef type, uint64_t offset, uint64_t size); - StructureRef defineInnerName(TypeRef type, uint64_t offset, uint64_t size); - StructureRef defineInnerUnknownType(QWidget* parent, TypeRef type, uint64_t offset, uint64_t size); - StructureRef defineInnerIntegerSize(TypeRef type, uint64_t offset, uint64_t size); - StructureRef defineInnerSign(TypeRef type, uint64_t offset, uint64_t size); + StructureRef defineInnerType(TypeRef type, TypeRef baseType, uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerPointer(TypeRef type, ArchitectureRef arch, uint64_t baseAddress, + uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerStruct(TypeRef type, uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerArray(TypeRef type, uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerName(TypeRef type, uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerUnknownType(QWidget* parent, TypeRef type, uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerIntegerSize(TypeRef type, uint64_t offset, uint64_t size, std::set& seen); + StructureRef defineInnerSign(TypeRef type, uint64_t offset, uint64_t size, std::set& seen); TypeRef getPointerTypeAndName(ArchitectureRef arch, uint64_t addr, std::string& name); std::string getVariableName(uint64_t addr); @@ -183,6 +184,9 @@ class BINARYNINJAUIAPI LinearView: public QAbstractScrollArea, public View, publ BNAnalysisWarningActionType getAnalysisWarningActionAtPos(const LinearViewLine& line, int x); + void getCurrentOffsetByTypeInternal(TypeRef resType, uint64_t baseAddr, uint64_t& begin, uint64_t& end, + bool singleLine, std::set& seen); + private Q_SLOTS: void adjustSize(int width, int height); void viewInHexEditor(); -- cgit v1.3.1