OSDN Git Service

Improve error message for empty list of public libs
authorDimitry Ivanov <dimitry@google.com>
Thu, 21 Apr 2016 21:57:38 +0000 (14:57 -0700)
committerDimitry Ivanov <dimitry@google.com>
Thu, 21 Apr 2016 22:37:01 +0000 (15:37 -0700)
Change-Id: I5a3cbc99d34e05559426b521a964d1407b67a6c4

linker/linker.cpp
tests/dlext_test.cpp

index 0fdf90d..c193861 100644 (file)
@@ -2365,12 +2365,16 @@ int do_dlclose(void* handle) {
 }
 
 bool init_namespaces(const char* public_ns_sonames, const char* anon_ns_library_path) {
-  CHECK(public_ns_sonames != nullptr);
   if (g_public_namespace_initialized) {
     DL_ERR("public namespace has already been initialized.");
     return false;
   }
 
+  if (public_ns_sonames == nullptr || public_ns_sonames[0] == '\0') {
+    DL_ERR("error initializing public namespace: the list of public libraries is empty.");
+    return false;
+  }
+
   std::vector<std::string> sonames = android::base::Split(public_ns_sonames, ":");
 
   ProtectedDataGuard guard;
index 87e5dbc..420c934 100644 (file)
@@ -629,6 +629,10 @@ TEST(dlext, ns_smoke) {
   ASSERT_STREQ("android_init_namespaces failed: error initializing public namespace: "
                "\"libnstest_public.so\" was not found in the default namespace", dlerror());
 
+  ASSERT_FALSE(android_init_namespaces("", nullptr));
+  ASSERT_STREQ("android_init_namespaces failed: error initializing public namespace: "
+               "the list of public libraries is empty.", dlerror());
+
   const std::string lib_path = std::string(getenv("ANDROID_DATA")) + NATIVE_TESTS_PATH;
 
   const std::string lib_public_path = lib_path + "/public_namespace_libs/" + g_public_lib;