summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2020-06-26 23:08:45 -0400
committerRusty Wagner <rusty@vector35.com>2020-06-26 23:08:45 -0400
commita7e39c151f28453dc7ed00cf3d20959a3061f277 (patch)
treed51293990cf6f1dd6c674bca3efcb694084b91c0
parentc34409b32940ea37dac2b502e6ad354343440bc8 (diff)
Fix crash on recursive structure
-rw-r--r--ui/linearview.h20
1 files 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<TypeRef>& seen);
+ StructureRef defineInnerPointer(TypeRef type, ArchitectureRef arch, uint64_t baseAddress,
+ uint64_t offset, uint64_t size, std::set<TypeRef>& seen);
+ StructureRef defineInnerStruct(TypeRef type, uint64_t offset, uint64_t size, std::set<TypeRef>& seen);
+ StructureRef defineInnerArray(TypeRef type, uint64_t offset, uint64_t size, std::set<TypeRef>& seen);
+ StructureRef defineInnerName(TypeRef type, uint64_t offset, uint64_t size, std::set<TypeRef>& seen);
+ StructureRef defineInnerUnknownType(QWidget* parent, TypeRef type, uint64_t offset, uint64_t size, std::set<TypeRef>& seen);
+ StructureRef defineInnerIntegerSize(TypeRef type, uint64_t offset, uint64_t size, std::set<TypeRef>& seen);
+ StructureRef defineInnerSign(TypeRef type, uint64_t offset, uint64_t size, std::set<TypeRef>& 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<TypeRef>& seen);
+
private Q_SLOTS:
void adjustSize(int width, int height);
void viewInHexEditor();