diff options
author | Rhed Jao <rhedjao@google.com> | 2020-11-20 02:18:53 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-11-20 02:18:53 +0000 |
commit | 61bcee0cd1e38c4e67a25880d5639192bfa0e097 (patch) | |
tree | f62fcecd6b44444b634097d5e6f48ea0409d2059 /tools/aapt2/util/Util.cpp | |
parent | 63c92061a11e80f0c020bb66beb3f5f50b8a55bc (diff) | |
parent | 2c4344223d84204a9a317ceff2fa7183d1ee5621 (diff) |
Merge "aapt2: Limit length of package name and shared user id"
Diffstat (limited to 'tools/aapt2/util/Util.cpp')
-rw-r--r-- | tools/aapt2/util/Util.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tools/aapt2/util/Util.cpp b/tools/aapt2/util/Util.cpp index ef33c3463a81..28330db966af 100644 --- a/tools/aapt2/util/Util.cpp +++ b/tools/aapt2/util/Util.cpp @@ -38,6 +38,11 @@ using ::android::StringPiece16; namespace aapt { namespace util { +// Package name and shared user id would be used as a part of the file name. +// Limits size to 223 and reserves 32 for the OS. +// See frameworks/base/core/java/android/content/pm/parsing/ParsingPackageUtils.java +constexpr static const size_t kMaxPackageNameSize = 223; + static std::vector<std::string> SplitAndTransform( const StringPiece& str, char sep, const std::function<char(char)>& f) { std::vector<std::string> parts; @@ -169,9 +174,21 @@ static int IsAndroidNameImpl(const StringPiece& str) { } bool IsAndroidPackageName(const StringPiece& str) { + if (str.size() > kMaxPackageNameSize) { + return false; + } return IsAndroidNameImpl(str) > 1 || str == "android"; } +bool IsAndroidSharedUserId(const android::StringPiece& package_name, + const android::StringPiece& shared_user_id) { + if (shared_user_id.size() > kMaxPackageNameSize) { + return false; + } + return shared_user_id.empty() || IsAndroidNameImpl(shared_user_id) > 1 || + package_name == "android"; +} + bool IsAndroidSplitName(const StringPiece& str) { return IsAndroidNameImpl(str) > 0; } |