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

Commit b9656a93 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

old paths contains all entries when updating

In certains circumstances, only the base and split APKs were included in
the "old paths" list when updating the application info. Instead, this
list should contain _all_ elements, including any additional libraries
that may be added to the overall classpath.

Bug: 77342775
Test: Manual. Install a package. Install a split with --dont_kill. See that the path doesn't contain duplicate entries
Change-Id: Id9739cce215ab07bff1b17966583c0cf51a0b34a
parent 39bd7925
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -5333,8 +5333,8 @@ public final class ActivityThread extends ClientTransactionHandler {
                                        }
                                    }
                                }
                                final List<String> oldPaths =
                                        sPackageManager.getPreviousCodePaths(packageName);
                                final ArrayList<String> oldPaths = new ArrayList<>();
                                LoadedApk.makePaths(this, pkgInfo.getApplicationInfo(), oldPaths);
                                pkgInfo.updateApplicationInfo(aInfo, oldPaths);
                            } catch (RemoteException e) {
                            }
+0 −2
Original line number Diff line number Diff line
@@ -644,8 +644,6 @@ interface IPackageManager {

    boolean isPackageDeviceAdminOnAnyUser(String packageName);

    List<String> getPreviousCodePaths(in String packageName);

    int getInstallReason(String packageName, int userId);

    ParceledListSlice getSharedLibraries(in String packageName, int flags, int userId);
+0 −16
Original line number Diff line number Diff line
@@ -16403,22 +16403,6 @@ public class PackageManagerService extends IPackageManager.Stub
        }
    }
    @Override
    public List<String> getPreviousCodePaths(String packageName) {
        final int callingUid = Binder.getCallingUid();
        final List<String> result = new ArrayList<>();
        if (getInstantAppPackageName(callingUid) != null) {
            return result;
        }
        final PackageSetting ps = mSettings.mPackages.get(packageName);
        if (ps != null
                && ps.oldCodePaths != null
                && !filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) {
            result.addAll(ps.oldCodePaths);
        }
        return result;
    }
    private void replaceNonSystemPackageLIF(PackageParser.Package deletedPackage,
            PackageParser.Package pkg, final @ParseFlags int parseFlags,
            final @ScanFlags int scanFlags, UserHandle user, int[] allUsers,