diff options
author | 2025-04-17 16:31:27 -0700 | |
---|---|---|
committer | 2025-04-22 18:30:50 -0700 | |
commit | 1144bcaee5c28ce4261865af197990b7b77f8e28 (patch) | |
tree | e4cd65da39c8b0e29f001d752bcd8af007eba96e /libs/androidfw/AssetsProvider.cpp | |
parent | c2992ce6c7904e7d65c264d1fcee6e0fc2902ae3 (diff) |
[res] Fix a crash for the apps doing a bad thing
Some apps started crashing after the CL that changed one of the
parameters of ZipAssetsProvider constructor from time_t to
timespec. Apparently they dlsym() and call that constructor,
even when it's not a public or somehow supported API.
This CL puts one back for them so they at least don't stop
working all at once, and instead it just logs an error so the
developers could at least know they're doing a BAD THING.
+ fix the timespec operator== to actually compare nanoseconds.
Bug: 406670650
Test: run the app and ensure it launches
Flag: EXEMPT bugfix - a dummy symbol that's unflaggable
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:481f13eaff6a88cbe9b8b9da65f52bc26ba440bd)
Merged-In: I85e03985d7303f4e0f943441da57cf0f50230db6
Change-Id: I85e03985d7303f4e0f943441da57cf0f50230db6
Diffstat (limited to 'libs/androidfw/AssetsProvider.cpp')
-rw-r--r-- | libs/androidfw/AssetsProvider.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libs/androidfw/AssetsProvider.cpp b/libs/androidfw/AssetsProvider.cpp index 808509120462..13456fbadbc7 100644 --- a/libs/androidfw/AssetsProvider.cpp +++ b/libs/androidfw/AssetsProvider.cpp @@ -104,7 +104,14 @@ void ZipAssetsProvider::ZipCloser::operator()(ZipArchive* a) const { } ZipAssetsProvider::ZipAssetsProvider(ZipArchiveHandle handle, PathOrDebugName&& path, - package_property_t flags, ModDate last_mod_time) + package_property_t flags, time_t last_mod_time) + : zip_handle_(handle), name_(std::move(path)), flags_(flags), last_mod_time_(last_mod_time) { + LOG(ERROR) << "This function is not supported and will result in " + "poor performance and/or crashes. Stop calling it."; +} + +ZipAssetsProvider::ZipAssetsProvider(ZipArchiveHandle handle, PathOrDebugName&& path, + ModDate last_mod_time, package_property_t flags) : zip_handle_(handle), name_(std::move(path)), flags_(flags), last_mod_time_(last_mod_time) { } @@ -132,7 +139,7 @@ std::unique_ptr<ZipAssetsProvider> ZipAssetsProvider::Create(std::string path, } return std::unique_ptr<ZipAssetsProvider>( - new ZipAssetsProvider(handle, PathOrDebugName::Path(std::move(path)), flags, mod_date)); + new ZipAssetsProvider(handle, PathOrDebugName::Path(std::move(path)), mod_date, flags)); } std::unique_ptr<ZipAssetsProvider> ZipAssetsProvider::Create(base::unique_fd fd, @@ -166,7 +173,7 @@ std::unique_ptr<ZipAssetsProvider> ZipAssetsProvider::Create(base::unique_fd fd, } return std::unique_ptr<ZipAssetsProvider>(new ZipAssetsProvider( - handle, PathOrDebugName::DebugName(std::move(friendly_name)), flags, mod_date)); + handle, PathOrDebugName::DebugName(std::move(friendly_name)), mod_date, flags)); } std::unique_ptr<Asset> ZipAssetsProvider::OpenInternal(const std::string& path, |