Index: build/android/rezip/rezip.cc |
diff --git a/build/android/rezip/rezip.cc b/build/android/rezip/rezip.cc |
index d839ab308fe479c595fc1d5fc84f8b4786814ee3..ce9bc86c5050fcef5781716eaa2db6a310743223 100644 |
--- a/build/android/rezip/rezip.cc |
+++ b/build/android/rezip/rezip.cc |
@@ -262,11 +262,13 @@ static int PageAlignCrazyLibrary(const char* in_filename, |
// As only the read side API provides offsets, we check that we added the |
// correct amount of padding by reading the zip file we just generated. |
-static bool CheckPageAlign(const char* out_zip_filename) { |
+// Also enforce that only one library is in the APK. |
+static bool CheckPageAlignAndOnlyOneLibrary(const char* out_zip_filename) { |
ScopedUnzip scoped_unzip(out_zip_filename); |
unzFile in_file = scoped_unzip.OpenOrDie(); |
int err = 0; |
+ int count = 0; |
bool checked = false; |
while (true) { |
char in_filename[kMaxFilenameInZip + 1]; |
@@ -288,6 +290,18 @@ static bool CheckPageAlign(const char* out_zip_filename) { |
in_filename[in_info.size_filename] = '\0'; |
if (IsCrazyLibraryFilename(in_filename)) { |
+ count++; |
+ if (count > 1) { |
+ LOG(ERROR) |
+ << "Found more than one library in " << out_zip_filename << "\n" |
+ << "Multiple libraries are not supported for APKs that use " |
+ << "'load_library_from_zip_file'.\n" |
+ << "See crbug/388223.\n" |
+ << "Note, check that your build is clean.\n" |
+ << "An unclean build can incorrectly incorporate old " |
+ << "libraries in the APK."; |
+ return false; |
+ } |
err = unzOpenCurrentFile(in_file); |
if (err != UNZ_OK) { |
LOG(ERROR) << "failed to open subfile" << out_zip_filename << " " |
@@ -513,7 +527,7 @@ int main(int argc, const char* argv[]) { |
inflate_predicate_fun)) { |
exit(1); |
} |
- if (check_page_align && !CheckPageAlign(out_zip_filename)) { |
+ if (check_page_align && !CheckPageAlignAndOnlyOneLibrary(out_zip_filename)) { |
exit(1); |
} |
return 0; |