diff options
| author | Mason Reed <mason@vector35.com> | 2025-02-11 13:57:47 -0500 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-02-11 22:13:56 -0500 |
| commit | b546d0c8d8957064424f37f1cae7bc5fc3695f4a (patch) | |
| tree | 809bad573aa08ba6611697cc9c2d4d4464b3c747 /function.cpp | |
| parent | 127ab740841f6938e359650c742314a7f1185904 (diff) | |
Fix partial initialization of `DisassemblyTextLine`
The usage of `DisassemblyTextLine` in the FFI was unsound, we would forget to initialize some fields causing a myriad of issues where round-tripping through the FFI was losing information.
Diffstat (limited to 'function.cpp')
| -rw-r--r-- | function.cpp | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/function.cpp b/function.cpp index 811e64c3..1940734d 100644 --- a/function.cpp +++ b/function.cpp @@ -23,6 +23,8 @@ #include "highlevelilinstruction.h" #include <cstring> +#include "ffi.h" + using namespace BinaryNinja; using namespace std; @@ -2554,19 +2556,7 @@ vector<DisassemblyTextLine> Function::GetTypeTokens(DisassemblySettings* setting BNDisassemblyTextLine* lines = BNGetFunctionTypeTokens(m_object, settings ? settings->GetObject() : nullptr, &count); - vector<DisassemblyTextLine> result; - result.reserve(count); - for (size_t i = 0; i < count; i++) - { - DisassemblyTextLine line; - line.addr = lines[i].addr; - line.instrIndex = lines[i].instrIndex; - line.highlight = lines[i].highlight; - line.tokens = InstructionTextToken::ConvertInstructionTextTokenList(lines[i].tokens, lines[i].count); - line.tags = Tag::ConvertTagList(lines[i].tags, lines[i].tagCount); - result.push_back(line); - } - + vector<DisassemblyTextLine> result = ParseAPIObjectList<DisassemblyTextLine>(lines, count); BNFreeDisassemblyTextLines(lines, count); return result; } |
