Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3941bddc authored by Andreas Gampe's avatar Andreas Gampe Committed by Android (Google) Code Review
Browse files

Merge "resolve merge conflicts of 50c5f042 to master"

parents 18fe8f63 6b59a743
Loading
Loading
Loading
Loading
+31 −14
Original line number Diff line number Diff line
@@ -241,6 +241,18 @@ class FileDescriptorInfo {
    is_sock(false) {
  }

  static bool StartsWith(const std::string& str, const std::string& prefix) {
    return str.compare(0, prefix.size(), prefix) == 0;
  }

  static bool EndsWith(const std::string& str, const std::string& suffix) {
    if (suffix.size() > str.size()) {
      return false;
    }

    return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
  }

  // Returns true iff. a given path is whitelisted. A path is whitelisted
  // if it belongs to the whitelist (see kPathWhitelist) or if it's a path
  // under /system/framework that ends with ".jar" or if it is a system
@@ -252,31 +264,36 @@ class FileDescriptorInfo {
      }
    }

    static const char* kFrameworksPrefix = "/system/framework/";
    static const char* kJarSuffix = ".jar";
    if (android::base::StartsWith(path, kFrameworksPrefix)
        && android::base::EndsWith(path, kJarSuffix)) {
    static const std::string kFrameworksPrefix = "/system/framework/";
    static const std::string kJarSuffix = ".jar";
    if (StartsWith(path, kFrameworksPrefix) && EndsWith(path, kJarSuffix)) {
      return true;
    }

    // Whitelist files needed for Runtime Resource Overlay, like these:
    // /system/vendor/overlay/framework-res.apk
    // /system/vendor/overlay-subdir/pg/framework-res.apk
    // /vendor/overlay/framework-res.apk
    // /vendor/overlay/PG/android-framework-runtime-resource-overlay.apk
    // /data/resource-cache/system@vendor@overlay@framework-res.apk@idmap
    // /data/resource-cache/system@vendor@overlay@PG@framework-res.apk@idmap
    static const char* kOverlayDir = "/vendor/overlay/";
    static const char* kApkSuffix = ".apk";

    if (android::base::StartsWith(path, kOverlayDir)
        && android::base::EndsWith(path, kApkSuffix)
    // /data/resource-cache/system@vendor@overlay-subdir@pg@framework-res.apk@idmap
    // See AssetManager.cpp for more details on overlay-subdir.
    static const std::string kOverlayDir = "/system/vendor/overlay/";
    static const std::string kVendorOverlayDir = "/vendor/overlay";
    static const std::string kOverlaySubdir = "/system/vendor/overlay-subdir/";
    static const std::string kApkSuffix = ".apk";

    if ((StartsWith(path, kOverlayDir) || StartsWith(path, kOverlaySubdir)
         || StartsWith(path, kVendorOverlayDir))
        && EndsWith(path, kApkSuffix)
        && path.find("/../") == std::string::npos) {
      return true;
    }

    static const char* kOverlayIdmapPrefix = "/data/resource-cache/";
    static const char* kOverlayIdmapSuffix = ".apk@idmap";
    if (android::base::StartsWith(path, kOverlayIdmapPrefix)
        && android::base::EndsWith(path, kOverlayIdmapSuffix)) {
    static const std::string kOverlayIdmapPrefix = "/data/resource-cache/";
    static const std::string kOverlayIdmapSuffix = ".apk@idmap";
    if (StartsWith(path, kOverlayIdmapPrefix) && EndsWith(path, kOverlayIdmapSuffix)
        && path.find("/../") == std::string::npos) {
      return true;
    }