From a3939bdec15f9299ae9a681255fa93c47113870a Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 24 Jan 2023 18:38:13 -0700 Subject: Fix UAF on C++ BinaryView plugin init, improve demangler and BinaryView APIs --- binaryviewtype.cpp | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) (limited to 'binaryviewtype.cpp') diff --git a/binaryviewtype.cpp b/binaryviewtype.cpp index b1f9ebe9..8ab09aae 100644 --- a/binaryviewtype.cpp +++ b/binaryviewtype.cpp @@ -243,7 +243,7 @@ string BinaryViewType::GetLongName() bool BinaryViewType::IsDeprecated() { - return BNIsBinaryViewTypeDeprecated(m_object); + return false; } @@ -283,10 +283,41 @@ BNPlatform* BinaryViewType::PlatformRecognizerCallback(void* ctxt, BNBinaryView* } +Ref BinaryViewType::Parse(BinaryView* data) +{ + Ref viewRef; + + // Create ephemeral BinaryView to generate information for preview + if (data && (GetName() != data->GetTypeName())) + { + viewRef = Create(data); + if (!viewRef || !viewRef->Init()) + LogError("View type '%s' could not be created", GetName().c_str()); + } + + return viewRef; +} + + +Ref BinaryViewType::GetLoadSettingsForData(BinaryView* data) +{ + return GetDefaultLoadSettingsForData(data); +} + + +Ref BinaryViewType::GetDefaultLoadSettingsForData(BinaryView* data) +{ + BNSettings* settings = BNGetBinaryViewDefaultLoadSettingsForData(m_object, data->GetObject()); + if (!settings) + return nullptr; + return new Settings(settings); +} + + CoreBinaryViewType::CoreBinaryViewType(BNBinaryViewType* type) : BinaryViewType(type) {} -BinaryView* CoreBinaryViewType::Create(BinaryView* data) +Ref CoreBinaryViewType::Create(BinaryView* data) { BNBinaryView* view = BNCreateBinaryViewOfType(m_object, data->GetObject()); if (!view) @@ -295,7 +326,7 @@ BinaryView* CoreBinaryViewType::Create(BinaryView* data) } -BinaryView* CoreBinaryViewType::Parse(BinaryView* data) +Ref CoreBinaryViewType::Parse(BinaryView* data) { BNBinaryView* view = BNParseBinaryViewOfType(m_object, data->GetObject()); if (!view) @@ -310,6 +341,12 @@ bool CoreBinaryViewType::IsTypeValidForData(BinaryView* data) } +bool CoreBinaryViewType::IsDeprecated() +{ + return BNIsBinaryViewTypeDeprecated(m_object); +} + + Ref CoreBinaryViewType::GetLoadSettingsForData(BinaryView* data) { BNSettings* settings = BNGetBinaryViewLoadSettingsForData(m_object, data->GetObject()); -- cgit v1.3.1