diff --git a/symbol/symbol_resolve.cpp b/symbol/symbol_resolve.cpp index fd6dc661cdad913b6cad86c242a9cfb8dd3434a4..79e97ea444f9b57381b3395e13d06e58eb25be06 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 edb79e7b59e0fe7bbd5bade836ead3ee710f94ab..48ec5142c04bd8cd39ab88da1cd72193dcdca388 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: