From 5336371f74544ca0dd9a2b5ac06af3e0980b581d Mon Sep 17 00:00:00 2001 From: echo <2220386943@qq.com> Date: Wed, 24 Apr 2024 17:24:30 +0800 Subject: [PATCH] fix cppDemangle len range the symbol man len --- symbol/symbol_resolve.cpp | 11 +++++++++-- symbol/symbol_resolve.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/symbol/symbol_resolve.cpp b/symbol/symbol_resolve.cpp index fd6dc66..79e97ea 100644 --- a/symbol/symbol_resolve.cpp +++ b/symbol/symbol_resolve.cpp @@ -354,6 +354,13 @@ bool SymbolUtils::IsNumber(const std::string& str) return true; } +void SymbolUtils::StrCpy(char* dst, int dstLen, const char* src) +{ + int size = strlen(src) > dstLen ? dstLen + 1 : strlen(src) + 1; + memcpy(dst, src, size); + dst[dstLen] = '\0'; +} + bool MyElf::IsExecFile() { return elf.get_hdr().type == elf::et::exec; @@ -737,12 +744,12 @@ void SymbolResolve::SearchElfInfo(MyElf& myElf, unsigned long addr, struct Symbo std::string symName = elfSym->get_name(); char *name = CppNamedDemangle(symName.c_str()); if (name) { - strcpy(symbol->symbolName, name); + SymbolUtils::StrCpy(symbol->symbolName, MAX_LINUX_SYMBOL_LEN, name); free(name); name = nullptr; return; } - strcpy(symbol->symbolName, symName.c_str()); + SymbolUtils::StrCpy(symbol->symbolName, MAX_LINUX_SYMBOL_LEN, symName.c_str()); return; } diff --git a/symbol/symbol_resolve.h b/symbol/symbol_resolve.h index edb79e7..48ec514 100644 --- a/symbol/symbol_resolve.h +++ b/symbol/symbol_resolve.h @@ -142,6 +142,7 @@ namespace KUNPENG_SYM { static bool IsValidPath(const std::string& filePath); static bool IsNumber(const std::string& str); static void FreeStackAsm(struct StackAsm** stackAsm); + static void StrCpy(char* dst, int dstLen, const char* src); }; class SymbolResolve { public: -- Gitee