[lldb/Reproducer] Prevent crash when GDB multi-loader can't be created.
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 11 Mar 2020 06:06:39 +0000 (23:06 -0700)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 11 Mar 2020 06:16:55 +0000 (23:16 -0700)
Check that the multi loader isn't null and print an error otherwise.
This patch also extends the test to cover these error paths.

lldb/source/Commands/CommandObjectReproducer.cpp
lldb/test/Shell/Reproducer/TestDump.test

index a3b49b1..d73fa78 100644 (file)
@@ -422,8 +422,8 @@ protected:
           repro::MultiLoader<repro::CommandProvider>::Create(loader);
       if (!multi_loader) {
         SetError(result,
-                 make_error<StringError>(llvm::inconvertibleErrorCode(),
-                                         "Unable to create command loader."));
+                 make_error<StringError>("Unable to create command loader.",
+                                         llvm::inconvertibleErrorCode()));
         return false;
       }
 
@@ -448,6 +448,14 @@ protected:
       std::unique_ptr<repro::MultiLoader<repro::GDBRemoteProvider>>
           multi_loader =
               repro::MultiLoader<repro::GDBRemoteProvider>::Create(loader);
+
+      if (!multi_loader) {
+        SetError(result,
+                 make_error<StringError>("Unable to create GDB loader.",
+                                         llvm::inconvertibleErrorCode()));
+        return false;
+      }
+
       llvm::Optional<std::string> gdb_file;
       while ((gdb_file = multi_loader->GetNextFile())) {
         auto error_or_file = MemoryBuffer::getFile(*gdb_file);
index 3d4d21d..c193b80 100644 (file)
 # GDB: read packet: $OK#9a
 
 # RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix FILES
+
+# RUN: rm %t.repro/gdb-remote.yaml
+# RUN: %lldb -b -o 'reproducer dump -p gdb -f %t.repro' 2>&1 | FileCheck %s --check-prefix GDB-ERROR
+# GDB-ERROR: error: Unable to create GDB loader.
+
+# RUN: rm %t.repro/command-interpreter.yaml
+# RUN: %lldb -b -o 'reproducer dump -p commands -f %t.repro' 2>&1 | FileCheck %s --check-prefix COMMANDS-ERROR
+# COMMANDS-ERROR: error: Unable to create command loader.