[Lldb-commits] [lldb] 9aa6a47 - [lldb] Fix crash when launching in terminal

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Thu Apr 28 14:39:48 PDT 2022


Author: Jonas Devlieghere
Date: 2022-04-28T14:39:28-07:00
New Revision: 9aa6a479738c7bf21128f9c45ea4ffcf82d80cbf

URL: https://github.com/llvm/llvm-project/commit/9aa6a479738c7bf21128f9c45ea4ffcf82d80cbf
DIFF: https://github.com/llvm/llvm-project/commit/9aa6a479738c7bf21128f9c45ea4ffcf82d80cbf.diff

LOG: [lldb] Fix crash when launching in terminal

This patch fixes a crash when using process launch -t to launch the
inferior from a TTY. The issue is that on Darwin, Host.mm is calling
ConnectionFileDescriptor::Connect without a socket_id_callback_type. The
overload passes nullptr as the function ref, which gets called
unconditionally as the socket_id_callback.

One potential way to fix this is to change all the lambdas to include a
null check, but instead I went with an empty lambda.

Differential revision: https://reviews.llvm.org/D124535

Added: 
    

Modified: 
    lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp
    lldb/unittests/Host/ConnectionFileDescriptorTest.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp b/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp
index c8b743ac689ca..dc5b24979fb54 100644
--- a/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp
+++ b/lldb/source/Host/posix/ConnectionFileDescriptorPosix.cpp
@@ -122,7 +122,8 @@ bool ConnectionFileDescriptor::IsConnected() const {
 
 ConnectionStatus ConnectionFileDescriptor::Connect(llvm::StringRef path,
                                                    Status *error_ptr) {
-  return Connect(path, nullptr, error_ptr);
+  return Connect(
+      path, [](llvm::StringRef) {}, error_ptr);
 }
 
 ConnectionStatus

diff  --git a/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp b/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp
index e622ac0b06052..49ff73e410ab4 100644
--- a/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp
+++ b/lldb/unittests/Host/ConnectionFileDescriptorTest.cpp
@@ -23,13 +23,22 @@ class ConnectionFileDescriptorTest : public testing::Test {
     std::unique_ptr<TCPSocket> socket_a_up;
     std::unique_ptr<TCPSocket> socket_b_up;
     CreateTCPConnectedSockets(ip, &socket_a_up, &socket_b_up);
-    auto socket = socket_a_up.release();
+    auto *socket = socket_a_up.release();
     ConnectionFileDescriptor connection_file_descriptor(socket);
 
     std::string uri(connection_file_descriptor.GetURI());
     EXPECT_EQ((URI{"connect", ip, socket->GetRemotePortNumber(), "/"}),
               URI::Parse(uri).getValue());
   }
+
+  void TestConnect(std::string ip, std::string path) {
+    std::unique_ptr<TCPSocket> socket_a_up;
+    std::unique_ptr<TCPSocket> socket_b_up;
+    CreateTCPConnectedSockets(ip, &socket_a_up, &socket_b_up);
+    auto *socket = socket_a_up.release();
+    ConnectionFileDescriptor connection_file_descriptor(socket);
+    connection_file_descriptor.Connect(path, nullptr);
+  }
 };
 
 TEST_F(ConnectionFileDescriptorTest, TCPGetURIv4) {
@@ -43,3 +52,15 @@ TEST_F(ConnectionFileDescriptorTest, TCPGetURIv6) {
     return;
   TestGetURI("::1");
 }
+
+TEST_F(ConnectionFileDescriptorTest, Connectv4) {
+  if (!HostSupportsIPv4())
+    return;
+  TestConnect("127.0.0.1", "accept://127.0.0.1");
+}
+
+TEST_F(ConnectionFileDescriptorTest, Connectv6) {
+  if (!HostSupportsIPv6())
+    return;
+  TestConnect("::1", "accept://::1");
+}


        


More information about the lldb-commits mailing list