Defend LoadImageUsingPaths against a path list
authorJim Ingham <jingham@apple.com>
Fri, 20 Jul 2018 01:20:18 +0000 (01:20 +0000)
committerJim Ingham <jingham@apple.com>
Fri, 20 Jul 2018 01:20:18 +0000 (01:20 +0000)
with empty paths on it.

llvm-svn: 337515

lldb/packages/Python/lldbsuite/test/functionalities/load_using_paths/TestLoadUsingPaths.py
lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp

index ba85039..2050586 100644 (file)
@@ -103,10 +103,27 @@ class LoadUsingPathsTestCase(TestBase):
         out_spec = lldb.SBFileSpec()
         token = process.LoadImageUsingPaths(relative_spec, paths, out_spec, error)
 
-        self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token")
-        self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library")
+        self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token with relative path")
+        self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library with relative path")
 
         process.UnloadImage(token)
+        
+        # Make sure the presence of an empty path doesn't mess anything up:
+        paths.Clear()
+        paths.AppendString("")
+        paths.AppendString(os.path.join(self.wd, "no_such_dir"))
+        paths.AppendString(self.wd)
+        relative_spec = lldb.SBFileSpec(os.path.join("hidden", self.lib_name))
+
+        out_spec = lldb.SBFileSpec()
+        token = process.LoadImageUsingPaths(relative_spec, paths, out_spec, error)
+
+        self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token with included empty path")
+        self.assertEqual(out_spec, lldb.SBFileSpec(self.hidden_lib), "Found the expected library with included empty path")
+
+        process.UnloadImage(token)
+        
+
 
         # Finally, passing in an absolute path should work like the basename:
         # This should NOT work because we've taken hidden_dir off the paths:
index 16934be..5e7ffe7 100644 (file)
@@ -1155,6 +1155,10 @@ uint32_t PlatformPOSIX::DoLoadImage(lldb_private::Process *process,
     size_t buffer_size = 0;
     std::string path_array;
     for (auto path : *paths) {
+      // Don't insert empty paths, they will make us abort the path
+      // search prematurely.
+      if (path.empty())
+        continue;
       size_t path_size = path.size();
       path_array.append(path);
       path_array.push_back('\0');