[Lldb-commits] [lldb] r354798 - [lldb-mi] Check raw pointers before passing them to std::string ctor/assignment
Tatyana Krasnukha via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 25 08:40:11 PST 2019
Author: tkrasnukha
Date: Mon Feb 25 08:40:11 2019
New Revision: 354798
URL: http://llvm.org/viewvc/llvm-project?rev=354798&view=rev
Log:
[lldb-mi] Check raw pointers before passing them to std::string ctor/assignment
Differential Revision: https://reviews.llvm.org/D55653
Added:
lldb/trunk/unittests/tools/lldb-mi/
lldb/trunk/unittests/tools/lldb-mi/CMakeLists.txt
lldb/trunk/unittests/tools/lldb-mi/utils/
lldb/trunk/unittests/tools/lldb-mi/utils/CMakeLists.txt
lldb/trunk/unittests/tools/lldb-mi/utils/StringTest.cpp
Modified:
lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp
lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp
lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp
lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp
lldb/trunk/tools/lldb-mi/MIDriverMgr.cpp
lldb/trunk/tools/lldb-mi/MIUtilString.cpp
lldb/trunk/tools/lldb-mi/MIUtilString.h
lldb/trunk/unittests/tools/CMakeLists.txt
Modified: lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmdCmdMiscellanous.cpp Mon Feb 25 08:40:11 2019
@@ -339,7 +339,9 @@ bool CMICmdCmdListThreadGroups::Acknowle
const char *pDir = sbTrgt.GetExecutable().GetDirectory();
const char *pFileName = sbTrgt.GetExecutable().GetFilename();
const CMIUtilString strFile(
- CMIUtilString::Format("%s/%s", pDir, pFileName));
+ CMIUtilString::Format("%s/%s",
+ CMIUtilString::WithNullAsEmpty(pDir),
+ CMIUtilString::WithNullAsEmpty(pFileName)));
const CMICmnMIValueConst miValueConst4(strFile);
const CMICmnMIValueResult miValueResult4("executable", miValueConst4);
miTuple.Add(miValueResult4);
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugSessionInfo.cpp Mon Feb 25 08:40:11 2019
@@ -375,11 +375,9 @@ bool CMICmnLLDBDebugSessionInfo::MIRespo
// Add "target-id"
const char *pThreadName = rThread.GetName();
- const MIuint len =
- (pThreadName != nullptr) ? CMIUtilString(pThreadName).length() : 0;
- const bool bHaveName = ((pThreadName != nullptr) && (len > 0) && (len < 32) &&
- CMIUtilString::IsAllValidAlphaAndNumeric(
- pThreadName)); // 32 is arbitrary number
+ const MIuint len = CMIUtilString(pThreadName).length();
+ const bool bHaveName = (len > 0) && (len < 32) && // 32 is arbitrary number
+ CMIUtilString::IsAllValidAlphaAndNumeric(pThreadName);
const char *pThrdFmt = bHaveName ? "%s" : "Thread %d";
CMIUtilString strThread;
if (bHaveName)
Modified: lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnLLDBDebugger.cpp Mon Feb 25 08:40:11 2019
@@ -43,10 +43,11 @@ static inline bool MI_char_summary_provi
lldb::BasicType type_code = value_type.GetBasicType();
if (type_code == lldb::eBasicTypeSignedChar)
- stream.Printf("%d %s", (int)value.GetValueAsSigned(), value.GetValue());
+ stream.Printf("%d %s", (int)value.GetValueAsSigned(),
+ CMIUtilString::WithNullAsEmpty(value.GetValue()));
else if (type_code == lldb::eBasicTypeUnsignedChar)
stream.Printf("%u %s", (unsigned)value.GetValueAsUnsigned(),
- value.GetValue());
+ CMIUtilString::WithNullAsEmpty(value.GetValue()));
else
return false;
Modified: lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIOutOfBandRecord.cpp Mon Feb 25 08:40:11 2019
@@ -109,8 +109,10 @@ MapOutOfBandToToken(CMICmnMIOutOfBandRec
//--
static CMIUtilString
BuildAsyncRecord(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
- return CMIUtilString::Format("%s%s", MapOutOfBandToToken(veType),
- MapOutOfBandToText(veType));
+ auto Token = MapOutOfBandToToken(veType);
+ auto Text = MapOutOfBandToText(veType);
+ return CMIUtilString::Format("%s%s", CMIUtilString::WithNullAsEmpty(Token),
+ CMIUtilString::WithNullAsEmpty(Text));
}
//++
Modified: lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MICmnMIResultRecord.cpp Mon Feb 25 08:40:11 2019
@@ -53,7 +53,8 @@ static const CMIUtilString
BuildResultRecord(const CMIUtilString &vrToken,
CMICmnMIResultRecord::ResultClass_e veType) {
const char *pStrResultRecord = MapResultClassToResultClassText(veType);
- return CMIUtilString::Format("%s^%s", vrToken.c_str(), pStrResultRecord);
+ return CMIUtilString::Format("%s^%s", vrToken.c_str(),
+ CMIUtilString::WithNullAsEmpty(pStrResultRecord));
}
//++
Modified: lldb/trunk/tools/lldb-mi/MIDriverMgr.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MIDriverMgr.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MIDriverMgr.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MIDriverMgr.cpp Mon Feb 25 08:40:11 2019
@@ -493,7 +493,8 @@ bool CMIDriverMgr::ParseArgs(const int a
bOk = bOk && m_pLog->Write(strArgs, CMICmnLog::eLogVerbosity_Log);
} else {
for (MIint i = 1; i < argc; i++) {
- strArgs += CMIUtilString::Format("%d:'%s' ", i, argv[i]);
+ strArgs += CMIUtilString::Format("%d:'%s' ", i,
+ CMIUtilString::WithNullAsEmpty(argv[i]));
}
bOk = bOk && m_pLog->Write(strArgs, CMICmnLog::eLogVerbosity_Log);
}
Modified: lldb/trunk/tools/lldb-mi/MIUtilString.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MIUtilString.cpp?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MIUtilString.cpp (original)
+++ lldb/trunk/tools/lldb-mi/MIUtilString.cpp Mon Feb 25 08:40:11 2019
@@ -37,7 +37,8 @@ CMIUtilString::CMIUtilString() : std::st
// Return: None.
// Throws: None.
//--
-CMIUtilString::CMIUtilString(const char *vpData) : std::string(vpData) {}
+CMIUtilString::CMIUtilString(const char *vpData)
+ : std::string(WithNullAsEmpty(vpData)) {}
//++
//------------------------------------------------------------------------------------
@@ -58,7 +59,7 @@ CMIUtilString::CMIUtilString(const std::
// Throws: None.
//--
CMIUtilString &CMIUtilString::operator=(const char *vpRhs) {
- assign(vpRhs);
+ assign(WithNullAsEmpty(vpRhs));
return *this;
}
@@ -103,12 +104,10 @@ CMIUtilString CMIUtilString::FormatPriv(
MIint n = vrFormat.size();
// IOR: mysterious crash in this function on some windows builds not able to
- // duplicate
- // but found article which may be related. Crash occurs in vsnprintf() or
- // va_copy()
+ // duplicate but found article which may be related. Crash occurs in
+ // vsnprintf() or va_copy().
// Duplicate vArgs va_list argument pointer to ensure that it can be safely
- // used in
- // a new frame
+ // used in a new frame.
// http://julipedia.meroh.net/2011/09/using-vacopy-to-safely-pass-ap.html
va_list argsDup;
va_copy(argsDup, vArgs);
@@ -127,8 +126,8 @@ CMIUtilString CMIUtilString::FormatPriv(
pFormatted.reset(new char[n + 1]); // +1 for safety margin
::strncpy(&pFormatted[0], vrFormat.c_str(), n);
- // We need to restore the variable argument list pointer to the start again
- // before running vsnprintf() more then once
+ // We need to restore the variable argument list pointer to the start again
+ // before running vsnprintf() more then once
va_copy(argsDup, argsCpy);
nFinal = ::vsnprintf(&pFormatted[0], n, vrFormat.c_str(), argsDup);
@@ -160,7 +159,8 @@ CMIUtilString CMIUtilString::FormatPriv(
CMIUtilString CMIUtilString::Format(const char *vFormating, ...) {
va_list args;
va_start(args, vFormating);
- CMIUtilString strResult = CMIUtilString::FormatPriv(vFormating, args);
+ CMIUtilString strResult =
+ CMIUtilString::FormatPriv(WithNullAsEmpty(vFormating), args);
va_end(args);
return strResult;
@@ -457,7 +457,7 @@ bool CMIUtilString::ExtractNumberFromHex
// Throws: None.
//--
bool CMIUtilString::IsAllValidAlphaAndNumeric(const char *vpText) {
- const size_t len = ::strlen(vpText);
+ const size_t len = ::strlen(WithNullAsEmpty(vpText));
if (len == 0)
return false;
Modified: lldb/trunk/tools/lldb-mi/MIUtilString.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-mi/MIUtilString.h?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-mi/MIUtilString.h (original)
+++ lldb/trunk/tools/lldb-mi/MIUtilString.h Mon Feb 25 08:40:11 2019
@@ -34,6 +34,9 @@ public:
static CMIUtilString FormatValist(const CMIUtilString &vrFormating,
va_list vArgs);
static bool IsAllValidAlphaAndNumeric(const char *vpText);
+ static const char *WithNullAsEmpty(const char *vpText) {
+ return vpText ? vpText : "";
+ }
static bool Compare(const CMIUtilString &vrLhs, const CMIUtilString &vrRhs);
static CMIUtilString ConvertToPrintableASCII(const char vChar,
bool bEscapeQuotes = false);
Modified: lldb/trunk/unittests/tools/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/tools/CMakeLists.txt?rev=354798&r1=354797&r2=354798&view=diff
==============================================================================
--- lldb/trunk/unittests/tools/CMakeLists.txt (original)
+++ lldb/trunk/unittests/tools/CMakeLists.txt Mon Feb 25 08:40:11 2019
@@ -1,3 +1,4 @@
+add_subdirectory(lldb-mi)
if(CMAKE_SYSTEM_NAME MATCHES "Android|Darwin|Linux|NetBSD")
if ((CMAKE_SYSTEM_NAME MATCHES "Darwin" AND SKIP_TEST_DEBUGSERVER) OR (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin" AND SKIP_LLDB_SERVER_BUILD))
# These tests are meant to test lldb-server/debugserver in isolation, and
Added: lldb/trunk/unittests/tools/lldb-mi/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/tools/lldb-mi/CMakeLists.txt?rev=354798&view=auto
==============================================================================
--- lldb/trunk/unittests/tools/lldb-mi/CMakeLists.txt (added)
+++ lldb/trunk/unittests/tools/lldb-mi/CMakeLists.txt Mon Feb 25 08:40:11 2019
@@ -0,0 +1,2 @@
+include_directories(${LLDB_SOURCE_DIR}/tools/lldb-mi)
+add_subdirectory(utils)
Added: lldb/trunk/unittests/tools/lldb-mi/utils/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/tools/lldb-mi/utils/CMakeLists.txt?rev=354798&view=auto
==============================================================================
--- lldb/trunk/unittests/tools/lldb-mi/utils/CMakeLists.txt (added)
+++ lldb/trunk/unittests/tools/lldb-mi/utils/CMakeLists.txt Mon Feb 25 08:40:11 2019
@@ -0,0 +1,12 @@
+add_library(lldb-mi-utils OBJECT
+ ${LLDB_SOURCE_DIR}/tools/lldb-mi/MIUtilString.cpp
+ )
+
+add_lldb_unittest(LLDBMiUtilTests
+ StringTest.cpp
+
+ LINK_COMPONENTS
+ Support
+ )
+
+target_sources(LLDBMiUtilTests PRIVATE $<TARGET_OBJECTS:lldb-mi-utils>)
Added: lldb/trunk/unittests/tools/lldb-mi/utils/StringTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/tools/lldb-mi/utils/StringTest.cpp?rev=354798&view=auto
==============================================================================
--- lldb/trunk/unittests/tools/lldb-mi/utils/StringTest.cpp (added)
+++ lldb/trunk/unittests/tools/lldb-mi/utils/StringTest.cpp Mon Feb 25 08:40:11 2019
@@ -0,0 +1,32 @@
+//===-- StringTest.cpp ------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "MIUtilString.h"
+#include "gtest/gtest.h"
+
+TEST(StringTest, ConstructFromNullptr) {
+ auto str = CMIUtilString(nullptr);
+ EXPECT_TRUE(str.empty());
+ EXPECT_NE(nullptr, str.c_str());
+ EXPECT_EQ(CMIUtilString(""), str);
+}
+
+TEST(StringTest, AssignNullptr) {
+ CMIUtilString str;
+ str = nullptr;
+ EXPECT_TRUE(str.empty());
+ EXPECT_NE(nullptr, str.c_str());
+ EXPECT_EQ(CMIUtilString(""), str);
+}
+
+TEST(StringTest, IsAllValidAlphaAndNumeric) {
+ EXPECT_TRUE(CMIUtilString::IsAllValidAlphaAndNumeric("123abc"));
+ EXPECT_FALSE(CMIUtilString::IsAllValidAlphaAndNumeric(""));
+ EXPECT_FALSE(CMIUtilString::IsAllValidAlphaAndNumeric(nullptr));
+}
+
More information about the lldb-commits
mailing list