)]}'
{
  "commit": "1aedae6e1049aa794b3554183bf07634c8fa291b",
  "tree": "71cb7098462103ce1dd76c9fb5e42ce982fb939c",
  "parents": [
    "3c05e56adf5b268ec5b20bf8aec460815e45161c"
  ],
  "author": {
    "name": "Jiakai Zhang",
    "email": "jiakaiz@google.com",
    "time": "Tue Mar 04 08:07:16 2025 -0800"
  },
  "committer": {
    "name": "Android Build Coastguard Worker",
    "email": "android-build-coastguard-worker@google.com",
    "time": "Wed Apr 09 15:15:56 2025 -0700"
  },
  "message": "Ensure the dex use database cannot grow unboundedly.\n\nIts size can theoretically be\n\n  O(\u003cowning package\u003e X \u003cdex path\u003e X \u003cloading package\u003e)\n\nOwning and loading packages are limited by the valid entries in the\npackage database. Dex paths from primary dex\u0027es are also limited by the\ninstalled packages. However dex paths for secondary dex\u0027es can\npotentially be unbounded, so impose a limit on them.\n\nThe limit is fixed for any given owning package, which is simpler than\nlimiting based on loading package. That restricts a package from adding\nan arbitrary number of secondary dex files in itself. Also check that\nthe dex file exists if the loading package is different from the owning\none, so that the former cannot consume entries up to the limit for the\nlatter.\n\nThe class loader context strings for secondary dex files are also not\nguaranteed bounded, so impose a limit on them as well.\n\nTest: atest DexUseManagerTest\nTest: Install app_debug.apk from b/391895923  #comment3 and verify that\n      it can run until OOM repeatedly without growing the database to\n      more than 650 KiB.\nBug: 391895923\nFlag: EXEMPT bugfix\nIgnore-AOSP-First: Security fix\n(cherry picked from commit e29eb53ebf11fdb891762db7dd927e95a0858fc0)\n(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:1c45139acc64ad0990ce8038f7188ada3b91c81c)\nMerged-In: Ic50bf22000730282d90a4f6aa1c49379357fe77a\nChange-Id: Ic50bf22000730282d90a4f6aa1c49379357fe77a\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "153e83b54b2dc7fb9a2a88633ead1c278f139240",
      "old_mode": 33188,
      "old_path": "libartservice/service/java/com/android/server/art/DexUseManagerLocal.java",
      "new_id": "3110f598378d372f2db08d85ac8824d119060472",
      "new_mode": 33188,
      "new_path": "libartservice/service/java/com/android/server/art/DexUseManagerLocal.java"
    },
    {
      "type": "modify",
      "old_id": "5850e617d8b417dbf94536709e997c8bec0b89db",
      "old_mode": 33188,
      "old_path": "libartservice/service/javatests/com/android/server/art/DexUseManagerTest.java",
      "new_id": "ddca9c4b272130d7218010b594640130f42e8eba",
      "new_mode": 33188,
      "new_path": "libartservice/service/javatests/com/android/server/art/DexUseManagerTest.java"
    },
    {
      "type": "modify",
      "old_id": "1dd962dbf4bda4c0d91f838e69bff191686796f6",
      "old_mode": 33188,
      "old_path": "libartservice/service/proto/dex_use.proto",
      "new_id": "1960882ad53768059df3efdf0b57a5dbab3808f9",
      "new_mode": 33188,
      "new_path": "libartservice/service/proto/dex_use.proto"
    }
  ]
}
