Fix nullpointer dereference in libnativeloader

The `char* path` argument of OpenNativeLibrary() can be nullptr. We are
constructing std::string from the path, which is a bug. Fixing it by
using char* without converting it to std::string.

Test: run-gtests.sh
JniCompilerTest.CompileAndRunIntMethodThroughStubNormalCompiler
is successful.

Change-Id: I91249da7c1a72a2dff9bc77e477b465e0c7ee056
This commit is contained in:
Jiyong Park 2019-05-17 18:48:32 +09:00
parent 6efb8e7754
commit d970ccb56e
2 changed files with 4 additions and 5 deletions

View File

@ -115,15 +115,14 @@ bool NativeLoaderNamespace::Link(const NativeLoaderNamespace& target,
}
}
void* NativeLoaderNamespace::Load(const std::string& lib_name) const {
void* NativeLoaderNamespace::Load(const char* lib_name) const {
if (!IsBridged()) {
android_dlextinfo extinfo;
extinfo.flags = ANDROID_DLEXT_USE_NAMESPACE;
extinfo.library_namespace = this->ToRawAndroidNamespace();
return android_dlopen_ext(lib_name.c_str(), RTLD_NOW, &extinfo);
return android_dlopen_ext(lib_name, RTLD_NOW, &extinfo);
} else {
return NativeBridgeLoadLibraryExt(lib_name.c_str(), RTLD_NOW,
this->ToRawNativeBridgeNamespace());
return NativeBridgeLoadLibraryExt(lib_name, RTLD_NOW, this->ToRawNativeBridgeNamespace());
}
}

View File

@ -52,7 +52,7 @@ struct NativeLoaderNamespace {
}
bool Link(const NativeLoaderNamespace& target, const std::string& shared_libs) const;
void* Load(const std::string& lib_name) const;
void* Load(const char* lib_name) const;
char* GetError() const;
static NativeLoaderNamespace GetExportedNamespace(const std::string& name, bool is_bridged);