diff --git a/lldb/source/API/SBFileSpec.cpp b/lldb/source/API/SBFileSpec.cpp index 8d63fc587d81..167b5f55b059 100644 --- a/lldb/source/API/SBFileSpec.cpp +++ b/lldb/source/API/SBFileSpec.cpp @@ -93,9 +93,8 @@ SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) { llvm::SmallString<64> result(src_path); lldb_private::FileSpec::Resolve (result); - size_t result_length = std::min(dst_len-1, result.size()); - ::strncpy(dst_path, result.c_str(), result_length + 1); - return result_length; + ::snprintf(dst_path, dst_len, "%s", result.c_str()); + return std::min(dst_len-1, result.size()); } const char * diff --git a/lldb/source/Host/common/FileSpec.cpp b/lldb/source/Host/common/FileSpec.cpp index 553764e560d1..a968dd93b619 100644 --- a/lldb/source/Host/common/FileSpec.cpp +++ b/lldb/source/Host/common/FileSpec.cpp @@ -793,10 +793,8 @@ FileSpec::GetPath(char *path, size_t path_max_len, bool denormalize) const return 0; std::string result = GetPath(denormalize); - - size_t result_length = std::min(path_max_len-1, result.length()); - ::strncpy(path, result.c_str(), result_length + 1); - return result_length; + ::snprintf(path, path_max_len, "%s", result.c_str()); + return std::min(path_max_len-1, result.length()); } std::string diff --git a/lldb/source/Host/common/SocketAddress.cpp b/lldb/source/Host/common/SocketAddress.cpp index b6a7a08bb3a3..3ab6cfeec4a0 100644 --- a/lldb/source/Host/common/SocketAddress.cpp +++ b/lldb/source/Host/common/SocketAddress.cpp @@ -48,8 +48,7 @@ const char* inet_ntop(int af, const void * src, const char* formatted = inet_ntoa(*static_cast<const in_addr*>(src)); if (formatted && strlen(formatted) < size) { - strncpy(dst, formatted, size); - return dst; + return ::strcpy(dst, formatted); } } return nullptr; @@ -64,8 +63,7 @@ const char* inet_ntop(int af, const void * src, ); if (full_size < static_cast<int>(size)) { - strncpy(dst,tmp,size); - return dst; + return ::strcpy(dst, tmp); } return nullptr; } diff --git a/lldb/source/Host/macosx/HostInfoMacOSX.mm b/lldb/source/Host/macosx/HostInfoMacOSX.mm index a22674e63aa9..edaff083373d 100644 --- a/lldb/source/Host/macosx/HostInfoMacOSX.mm +++ b/lldb/source/Host/macosx/HostInfoMacOSX.mm @@ -134,22 +134,23 @@ HostInfoMacOSX::ComputeSupportExeDirectory(FileSpec &file_spec) FileSpec lldb_file_spec; if (!GetLLDBPath(lldb::ePathTypeLLDBShlibDir, lldb_file_spec)) return false; - char raw_path[PATH_MAX]; - lldb_file_spec.GetPath(raw_path, sizeof(raw_path)); - char *framework_pos = ::strstr(raw_path, "LLDB.framework"); - if (framework_pos) + std::string raw_path = lldb_file_spec.GetPath(); + + size_t framework_pos = raw_path.find("LLDB.framework"); + if (framework_pos != std::string::npos) { framework_pos += strlen("LLDB.framework"); #if defined(__arm__) || defined(__arm64__) || defined(__aarch64__) // Shallow bundle - *framework_pos = '\0'; + raw_path.resize(framework_pos); #else // Normal bundle - ::strncpy(framework_pos, "/Resources", PATH_MAX - (framework_pos - raw_path)); + raw_path.resize(framework_pos); + raw_path.append("/Resources"); #endif } - file_spec.GetDirectory().SetCString(raw_path); + file_spec.GetDirectory().SetString(llvm::StringRef(raw_path.c_str(), raw_path.size())); return (bool)file_spec.GetDirectory(); } @@ -160,16 +161,16 @@ HostInfoMacOSX::ComputeHeaderDirectory(FileSpec &file_spec) if (!HostInfo::GetLLDBPath(lldb::ePathTypeLLDBShlibDir, lldb_file_spec)) return false; - char raw_path[PATH_MAX]; - lldb_file_spec.GetPath(raw_path, sizeof(raw_path)); + std::string raw_path = lldb_file_spec.GetPath(); - char *framework_pos = ::strstr(raw_path, "LLDB.framework"); - if (framework_pos) + size_t framework_pos = raw_path.find("LLDB.framework"); + if (framework_pos != std::string::npos) { framework_pos += strlen("LLDB.framework"); - ::strncpy(framework_pos, "/Headers", PATH_MAX - (framework_pos - raw_path)); + raw_path.resize(framework_pos); + raw_path.append("/Headers"); } - file_spec.GetDirectory().SetCString(raw_path); + file_spec.GetDirectory().SetString(llvm::StringRef(raw_path.c_str(), raw_path.size())); return true; } @@ -181,14 +182,14 @@ HostInfoMacOSX::ComputePythonDirectory(FileSpec &file_spec) if (!GetLLDBPath(lldb::ePathTypeLLDBShlibDir, lldb_file_spec)) return false; - char raw_path[PATH_MAX]; - lldb_file_spec.GetPath(raw_path, sizeof(raw_path)); + std::string raw_path = lldb_file_spec.GetPath(); - char *framework_pos = ::strstr(raw_path, "LLDB.framework"); - if (framework_pos) + size_t framework_pos = raw_path.find("LLDB.framework"); + if (framework_pos != std::string::npos) { framework_pos += strlen("LLDB.framework"); - ::strncpy(framework_pos, "/Resources/Python", PATH_MAX - (framework_pos - raw_path)); + raw_path.resize(framework_pos); + raw_path.append("/Resources/Python"); } else { @@ -198,9 +199,9 @@ HostInfoMacOSX::ComputePythonDirectory(FileSpec &file_spec) os.flush(); // We may get our string truncated. Should we protect this with an assert? - ::strncat(raw_path, python_version_dir.c_str(), sizeof(raw_path) - strlen(raw_path) - 1); + raw_path.append(python_version_dir.c_str()); } - file_spec.GetDirectory().SetCString(raw_path); + file_spec.GetDirectory().SetString(llvm::StringRef(raw_path.c_str(), raw_path.size())); return true; #else return false; @@ -214,16 +215,16 @@ HostInfoMacOSX::ComputeClangDirectory(FileSpec &file_spec) if (!GetLLDBPath (lldb::ePathTypeLLDBShlibDir, lldb_file_spec)) return false; - char raw_path[PATH_MAX]; - lldb_file_spec.GetPath (raw_path, sizeof (raw_path)); + std::string raw_path = lldb_file_spec.GetPath(); - char *framework_pos = ::strstr (raw_path, "LLDB.framework"); - if (framework_pos) + size_t framework_pos = raw_path.find("LLDB.framework"); + if (framework_pos != std::string::npos) { framework_pos += strlen("LLDB.framework"); - ::strncpy (framework_pos, "/Resources/Clang", PATH_MAX - (framework_pos - raw_path)); + raw_path.resize(framework_pos); + raw_path.append("/Resources/Clang"); } - file_spec.SetFile (raw_path, true); + file_spec.SetFile (raw_path.c_str(), true); return true; } @@ -233,16 +234,17 @@ HostInfoMacOSX::ComputeSystemPluginsDirectory(FileSpec &file_spec) FileSpec lldb_file_spec; if (!GetLLDBPath(lldb::ePathTypeLLDBShlibDir, lldb_file_spec)) return false; - char raw_path[PATH_MAX]; - lldb_file_spec.GetPath(raw_path, sizeof(raw_path)); - char *framework_pos = ::strstr(raw_path, "LLDB.framework"); - if (!framework_pos) + std::string raw_path = lldb_file_spec.GetPath(); + + size_t framework_pos = raw_path.find("LLDB.framework"); + if (framework_pos == std::string::npos) return false; framework_pos += strlen("LLDB.framework"); - ::strncpy(framework_pos, "/Resources/PlugIns", PATH_MAX - (framework_pos - raw_path)); - file_spec.GetDirectory().SetCString(raw_path); + raw_path.resize(framework_pos); + raw_path.append("/Resources/PlugIns"); + file_spec.GetDirectory().SetString(llvm::StringRef(raw_path.c_str(), raw_path.size())); return true; } diff --git a/lldb/source/Host/posix/HostInfoPosix.cpp b/lldb/source/Host/posix/HostInfoPosix.cpp index 018d423ee9d3..debff52d8c1c 100644 --- a/lldb/source/Host/posix/HostInfoPosix.cpp +++ b/lldb/source/Host/posix/HostInfoPosix.cpp @@ -153,11 +153,8 @@ HostInfoPosix::ComputeSupportExeDirectory(FileSpec &file_spec) char *lib_pos = ::strstr(raw_path, "/lib"); if (lib_pos != nullptr) { - // First terminate the raw path at the start of lib. - *lib_pos = '\0'; - // Now write in bin in place of lib. - ::strncpy(lib_pos, "/bin", PATH_MAX - (lib_pos - raw_path)); + ::snprintf(lib_pos, PATH_MAX - (lib_pos - raw_path), "/bin"); if (log) log->Printf("Host::%s() derived the bin path as: %s", __FUNCTION__, raw_path); diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index aa68160b0119..4fb039740ef7 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -3639,7 +3639,7 @@ GDBRemoteCommunicationClient::SaveRegisterState (lldb::tid_t tid, uint32_t &save if (thread_suffix_supported) ::snprintf (packet, sizeof(packet), "QSaveRegisterState;thread:%4.4" PRIx64 ";", tid); else - ::strncpy (packet, "QSaveRegisterState", sizeof(packet)); + ::snprintf(packet, sizeof(packet), "QSaveRegisterState"); StringExtractorGDBRemote response; diff --git a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp index a70c5d571144..f647ac434657 100644 --- a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp +++ b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp @@ -231,7 +231,7 @@ SymbolVendorMacOSX::CreateInstance (const lldb::ModuleSP &module_sp, lldb_privat const char *node_content = (const char *)::xmlNodeGetContent(value_node); if (node_content) { - strncpy(DBGBuildSourcePath, node_content, sizeof(DBGBuildSourcePath)); + ::snprintf(DBGBuildSourcePath, sizeof(DBGBuildSourcePath), "%s", node_content); xmlFree((void *) node_content); } } diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp index 129c5ee05a69..f7eca36deaa4 100644 --- a/lldb/source/lldb.cpp +++ b/lldb/source/lldb.cpp @@ -364,13 +364,13 @@ lldb_private::GetVersion () const char *newline_loc = strchr(version_string, '\n'); - size_t version_len = sizeof(g_version_string); + size_t version_len = sizeof(g_version_string) - 1; if (newline_loc && (newline_loc - version_string < static_cast<ptrdiff_t>(version_len))) version_len = newline_loc - version_string; - ::strncpy(g_version_string, version_string, version_len); + ::snprintf(g_version_string, version_len + 1, "%s", version_string); } return g_version_string;