[llvm] [Support] Fix segv if argv0 is null in getMainExecutable()
authorMichał Górny <mgorny@moritz.systems>
Sat, 7 Nov 2020 21:03:29 +0000 (22:03 +0100)
committerMichał Górny <mgorny@moritz.systems>
Mon, 9 Nov 2020 10:35:11 +0000 (11:35 +0100)
When LLDB Python bindings are used and stack backtraces are enabled
for logging, getMainExecutable() is called with argv0 being null.
This caused the fallback function getprogpath() (used on FreeBSD, NetBSD
and Linux) to segfault.  Make it handle null executable name gracefully.

Differential Revision: https://reviews.llvm.org/D91012

lldb/test/API/commands/log/basic/TestLogging.py
llvm/lib/Support/Unix/Path.inc

index da1a3e8..4ba67f8 100644 (file)
@@ -93,8 +93,6 @@ class LogTestCase(TestBase):
 
     # Enable all log options and check that nothing crashes.
     @skipIfWindows
-    # TODO: figure out why it segfaults
-    @skipIfFreeBSD
     def test_all_log_options(self):
         if (os.path.exists(self.log_file)):
             os.remove(self.log_file)
index 27b5461..8b1dbdb 100644 (file)
@@ -147,6 +147,9 @@ test_dir(char ret[PATH_MAX], const char *dir, const char *bin)
 static char *
 getprogpath(char ret[PATH_MAX], const char *bin)
 {
+  if (bin == nullptr)
+    return nullptr;
+
   /* First approach: absolute path. */
   if (bin[0] == '/') {
     if (test_dir(ret, "/", bin) == 0)