Loading core/jni/com_android_internal_content_NativeLibraryHelper.cpp +4 −12 Original line number Diff line number Diff line Loading @@ -48,7 +48,6 @@ #define LIB_SUFFIX_LEN (sizeof(LIB_SUFFIX) - 1) #define RS_BITCODE_SUFFIX ".bc" #define RS_BITCODE_SUFFIX_LEN (sizeof(RS_BITCODE_SUFFIX) -1) #define GDBSERVER "gdbserver" #define GDBSERVER_LEN (sizeof(GDBSERVER) - 1) Loading Loading @@ -322,7 +321,8 @@ private: public: static NativeLibrariesIterator* create(ZipFileRO* zipFile) { void* cookie = NULL; if (!zipFile->startIteration(&cookie)) { // Do not specify a suffix to find both .so files and gdbserver. if (!zipFile->startIteration(&cookie, APK_LIB, NULL /* suffix */)) { return NULL; } Loading @@ -337,11 +337,6 @@ public: continue; } // Make sure we're in the lib directory of the ZIP. if (strncmp(fileName, APK_LIB, APK_LIB_LEN)) { continue; } // Make sure the filename is at least to the minimum library name size. const size_t fileNameLen = strlen(fileName); static const size_t minLength = APK_LIB_LEN + 2 + LIB_PREFIX_LEN + 1 + LIB_SUFFIX_LEN; Loading Loading @@ -529,7 +524,7 @@ com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv * jlong apkHandle) { ZipFileRO* zipFile = reinterpret_cast<ZipFileRO*>(apkHandle); void* cookie = NULL; if (!zipFile->startIteration(&cookie)) { if (!zipFile->startIteration(&cookie, NULL /* prefix */, RS_BITCODE_SUFFIX)) { return APK_SCAN_ERROR; } Loading @@ -539,12 +534,9 @@ com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv * if (zipFile->getEntryFileName(next, fileName, sizeof(fileName))) { continue; } const size_t fileNameLen = strlen(fileName); const char* lastSlash = strrchr(fileName, '/'); const char* baseName = (lastSlash == NULL) ? fileName : fileName + 1; if (!strncmp(fileName + fileNameLen - RS_BITCODE_SUFFIX_LEN, RS_BITCODE_SUFFIX, RS_BITCODE_SUFFIX_LEN) && isFilenameSafe(baseName)) { if (isFilenameSafe(baseName)) { zipFile->endIteration(cookie); return BITCODE_PRESENT; } Loading include/androidfw/ZipFileRO.h +1 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,7 @@ public: * a matching call to endIteration with the same cookie. */ bool startIteration(void** cookie); bool startIteration(void** cookie, const char* prefix, const char* suffix); /** * Return the next entry in iteration order, or NULL if there are no more Loading libs/androidfw/ZipFileRO.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -126,10 +126,18 @@ bool ZipFileRO::getEntryInfo(ZipEntryRO entry, uint16_t* pMethod, return true; } bool ZipFileRO::startIteration(void** cookie) bool ZipFileRO::startIteration(void** cookie) { return startIteration(cookie, NULL, NULL); } bool ZipFileRO::startIteration(void** cookie, const char* prefix, const char* suffix) { _ZipEntryRO* ze = new _ZipEntryRO; int32_t error = StartIteration(mHandle, &(ze->cookie), NULL /* prefix */); ZipEntryName pe(prefix ? prefix : ""); ZipEntryName se(suffix ? suffix : ""); int32_t error = StartIteration(mHandle, &(ze->cookie), prefix ? &pe : NULL, suffix ? &se : NULL); if (error) { ALOGW("Could not start iteration over %s: %s", mFileName, ErrorCodeString(error)); delete ze; Loading Loading
core/jni/com_android_internal_content_NativeLibraryHelper.cpp +4 −12 Original line number Diff line number Diff line Loading @@ -48,7 +48,6 @@ #define LIB_SUFFIX_LEN (sizeof(LIB_SUFFIX) - 1) #define RS_BITCODE_SUFFIX ".bc" #define RS_BITCODE_SUFFIX_LEN (sizeof(RS_BITCODE_SUFFIX) -1) #define GDBSERVER "gdbserver" #define GDBSERVER_LEN (sizeof(GDBSERVER) - 1) Loading Loading @@ -322,7 +321,8 @@ private: public: static NativeLibrariesIterator* create(ZipFileRO* zipFile) { void* cookie = NULL; if (!zipFile->startIteration(&cookie)) { // Do not specify a suffix to find both .so files and gdbserver. if (!zipFile->startIteration(&cookie, APK_LIB, NULL /* suffix */)) { return NULL; } Loading @@ -337,11 +337,6 @@ public: continue; } // Make sure we're in the lib directory of the ZIP. if (strncmp(fileName, APK_LIB, APK_LIB_LEN)) { continue; } // Make sure the filename is at least to the minimum library name size. const size_t fileNameLen = strlen(fileName); static const size_t minLength = APK_LIB_LEN + 2 + LIB_PREFIX_LEN + 1 + LIB_SUFFIX_LEN; Loading Loading @@ -529,7 +524,7 @@ com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv * jlong apkHandle) { ZipFileRO* zipFile = reinterpret_cast<ZipFileRO*>(apkHandle); void* cookie = NULL; if (!zipFile->startIteration(&cookie)) { if (!zipFile->startIteration(&cookie, NULL /* prefix */, RS_BITCODE_SUFFIX)) { return APK_SCAN_ERROR; } Loading @@ -539,12 +534,9 @@ com_android_internal_content_NativeLibraryHelper_hasRenderscriptBitcode(JNIEnv * if (zipFile->getEntryFileName(next, fileName, sizeof(fileName))) { continue; } const size_t fileNameLen = strlen(fileName); const char* lastSlash = strrchr(fileName, '/'); const char* baseName = (lastSlash == NULL) ? fileName : fileName + 1; if (!strncmp(fileName + fileNameLen - RS_BITCODE_SUFFIX_LEN, RS_BITCODE_SUFFIX, RS_BITCODE_SUFFIX_LEN) && isFilenameSafe(baseName)) { if (isFilenameSafe(baseName)) { zipFile->endIteration(cookie); return BITCODE_PRESENT; } Loading
include/androidfw/ZipFileRO.h +1 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,7 @@ public: * a matching call to endIteration with the same cookie. */ bool startIteration(void** cookie); bool startIteration(void** cookie, const char* prefix, const char* suffix); /** * Return the next entry in iteration order, or NULL if there are no more Loading
libs/androidfw/ZipFileRO.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -126,10 +126,18 @@ bool ZipFileRO::getEntryInfo(ZipEntryRO entry, uint16_t* pMethod, return true; } bool ZipFileRO::startIteration(void** cookie) bool ZipFileRO::startIteration(void** cookie) { return startIteration(cookie, NULL, NULL); } bool ZipFileRO::startIteration(void** cookie, const char* prefix, const char* suffix) { _ZipEntryRO* ze = new _ZipEntryRO; int32_t error = StartIteration(mHandle, &(ze->cookie), NULL /* prefix */); ZipEntryName pe(prefix ? prefix : ""); ZipEntryName se(suffix ? suffix : ""); int32_t error = StartIteration(mHandle, &(ze->cookie), prefix ? &pe : NULL, suffix ? &se : NULL); if (error) { ALOGW("Could not start iteration over %s: %s", mFileName, ErrorCodeString(error)); delete ze; Loading