diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2023-01-24 18:38:13 -0700 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2023-01-30 11:57:43 -0500 |
| commit | a3939bdec15f9299ae9a681255fa93c47113870a (patch) | |
| tree | 2b4bb5643ac3cd25a618a99a542968fe81c66bcc /binaryviewtype.cpp | |
| parent | cf4220570c2d1b7105fb29719383f64026d46837 (diff) | |
Fix UAF on C++ BinaryView plugin init, improve demangler and BinaryView APIs
Diffstat (limited to 'binaryviewtype.cpp')
| -rw-r--r-- | binaryviewtype.cpp | 43 |
1 files changed, 40 insertions, 3 deletions
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<BinaryView> BinaryViewType::Parse(BinaryView* data) +{ + Ref<BinaryView> 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<Settings> BinaryViewType::GetLoadSettingsForData(BinaryView* data) +{ + return GetDefaultLoadSettingsForData(data); +} + + +Ref<Settings> 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<BinaryView> 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<BinaryView> 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<Settings> CoreBinaryViewType::GetLoadSettingsForData(BinaryView* data) { BNSettings* settings = BNGetBinaryViewLoadSettingsForData(m_object, data->GetObject()); |
