summaryrefslogtreecommitdiff
path: root/libnativeloader/native_loader_namespace.cpp
diff options
context:
space:
mode:
authorJiyong Park <jiyong@google.com>2019-07-30 15:27:39 +0900
committerJiyong Park <jiyong@google.com>2019-08-01 09:30:01 +0900
commitc5e85bf9ba0f857af38ad3b673416727f6b6f738 (patch)
treeed32fd8572090896ab4d3c988156e7cc9bbc601a /libnativeloader/native_loader_namespace.cpp
parent47757e93aa23862e3e45509df37e4290fa15ec2c (diff)
Don't fail if default namespace isn't found
This fixes a regression caused by 8f4afc8298ebae34e8f944a0807943997908c67d that libnativeloader can't no longer handle the case that it has failed to find the default namespace. Previously before the change, libnativeloader continued to use nullptr as the parent namespace which is reconized as the default namespace inside the linker. This change recovers the previous behavior. When the default namespace is not found, NativeLoaderNamespace object is constructed from nullptr. Bug: 138607234 Test: run app-compat/app-startup-gce on cf_x86_phone using forrest Change-Id: If518fbc055399b73e7d3a6b45ace0f71e9c25dae (cherry picked from commit db825ceba694eb6abe4ecff45fc4e1121646385f) Merged-In: If518fbc055399b73e7d3a6b45ace0f71e9c25dae
Diffstat (limited to 'libnativeloader/native_loader_namespace.cpp')
-rw-r--r--libnativeloader/native_loader_namespace.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/libnativeloader/native_loader_namespace.cpp b/libnativeloader/native_loader_namespace.cpp
index 4b0211670..4add6e690 100644
--- a/libnativeloader/native_loader_namespace.cpp
+++ b/libnativeloader/native_loader_namespace.cpp
@@ -69,10 +69,18 @@ Result<NativeLoaderNamespace> NativeLoaderNamespace::GetExportedNamespace(const
// "default" always exists.
Result<NativeLoaderNamespace> NativeLoaderNamespace::GetPlatformNamespace(bool is_bridged) {
auto ns = GetExportedNamespace(kPlatformNamespaceName, is_bridged);
- if (!ns) {
- ns = GetExportedNamespace(kDefaultNamespaceName, is_bridged);
+ if (ns) return ns;
+ ns = GetExportedNamespace(kDefaultNamespaceName, is_bridged);
+ if (ns) return ns;
+
+ // If nothing is found, return NativeLoaderNamespace constructed from nullptr.
+ // nullptr also means default namespace to the linker.
+ if (!is_bridged) {
+ return NativeLoaderNamespace(kDefaultNamespaceName, static_cast<android_namespace_t*>(nullptr));
+ } else {
+ return NativeLoaderNamespace(kDefaultNamespaceName,
+ static_cast<native_bridge_namespace_t*>(nullptr));
}
- return ns;
}
Result<NativeLoaderNamespace> NativeLoaderNamespace::Create(