From 76fd89667ebcee148ed2aef6790d5f1632420c5f Mon Sep 17 00:00:00 2001 From: Mark Rowe Date: Mon, 11 May 2026 18:55:03 -0700 Subject: Add static DataRendererContainer::RenderLinesForData This is a replacement for the `DataRenderer::RenderLinesForData` member function as it is impossible to use without leaking memory. --- datarenderer.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'datarenderer.cpp') diff --git a/datarenderer.cpp b/datarenderer.cpp index d87183b5..cab10792 100644 --- a/datarenderer.cpp +++ b/datarenderer.cpp @@ -135,7 +135,7 @@ vector DataRenderer::GetLinesForData(BinaryView* data, uint for (size_t i = 0; i < prefix.size(); i++) { BNFreeString(prefixes[i].text); - for (size_t j = 0; j < prefixes[j].namesCount; j++) + for (size_t j = 0; j < prefixes[i].namesCount; j++) BNFreeString(prefixes[i].typeNames[j]); delete[] prefixes[i].typeNames; } @@ -149,6 +149,25 @@ vector DataRenderer::GetLinesForData(BinaryView* data, uint vector DataRenderer::RenderLinesForData(BinaryView* data, uint64_t addr, Type* type, const std::vector& prefix, size_t width, vector>& context, const string& language) +{ + return DataRendererContainer::RenderLinesForData(data, addr, type, prefix, width, context, language); +} + + +void DataRendererContainer::RegisterGenericDataRenderer(DataRenderer* renderer) +{ + BNRegisterGenericDataRenderer(BNGetDataRendererContainer(), renderer->GetObject()); +} + + +void DataRendererContainer::RegisterTypeSpecificDataRenderer(DataRenderer* renderer) +{ + BNRegisterTypeSpecificDataRenderer(BNGetDataRendererContainer(), renderer->GetObject()); +} + + +vector DataRendererContainer::RenderLinesForData(BinaryView* data, uint64_t addr, Type* type, + const std::vector& prefix, size_t width, vector>& context, const string& language) { BNInstructionTextToken* prefixes = InstructionTextToken::CreateInstructionTextTokenList(prefix); BNTypeContext* typeCtx = new BNTypeContext[context.size()]; @@ -166,7 +185,7 @@ vector DataRenderer::RenderLinesForData(BinaryView* data, u for (size_t i = 0; i < prefix.size(); i++) { BNFreeString(prefixes[i].text); - for (size_t j = 0; j < prefixes[j].namesCount; j++) + for (size_t j = 0; j < prefixes[i].namesCount; j++) BNFreeString(prefixes[i].typeNames[j]); delete[] prefixes[i].typeNames; } @@ -176,15 +195,3 @@ vector DataRenderer::RenderLinesForData(BinaryView* data, u BNFreeDisassemblyTextLines(lines, count); return result; } - - -void DataRendererContainer::RegisterGenericDataRenderer(DataRenderer* renderer) -{ - BNRegisterGenericDataRenderer(BNGetDataRendererContainer(), renderer->GetObject()); -} - - -void DataRendererContainer::RegisterTypeSpecificDataRenderer(DataRenderer* renderer) -{ - BNRegisterTypeSpecificDataRenderer(BNGetDataRendererContainer(), renderer->GetObject()); -} -- cgit v1.3.1