Program: 1965
Project: 1965
Buggy source:
/** 
 * This method is an internal method that could be get invoked either to delete an installed package or to clean up a failed installation. After deleting an installed package, a broadcast is sent to notify any listeners that the package has been installed. For cleaning up a failed installation, the broadcast is not necessary since the package's installation wouldn't have sent the initial broadcast either The key steps in deleting a package are deleting the package information in internal structures like mPackages, deleting the packages base directories through installd updating mSettings to reflect current status persisting settings for later use sending a broadcast if necessary
 */
private int deletePackageX(String packageName,int userId,int flags){
  final PackageRemovedInfo info=new PackageRemovedInfo();
  final boolean res;
  IDevicePolicyManager dpm=IDevicePolicyManager.Stub.asInterface(ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
  try {
    if (dpm != null && (dpm.packageHasActiveAdmins(packageName,userId) || dpm.isDeviceOwner(packageName))) {
      Slog.w(TAG,"String_Node_Str" + packageName + "String_Node_Str");
      return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
    }
  }
 catch (  RemoteException e) {
  }
  boolean removedForAllUsers=false;
  boolean systemUpdate=false;
  int[] allUsers;
  boolean[] perUserInstalled;
synchronized (mPackages) {
    PackageSetting ps=mSettings.mPackages.get(packageName);
    allUsers=sUserManager.getUserIds();
    perUserInstalled=new boolean[allUsers.length];
    for (int i=0; i < allUsers.length; i++) {
      perUserInstalled[i]=ps.getInstalled(allUsers[i]);
    }
  }
synchronized (mInstallLock) {
    if (DEBUG_REMOVE)     Slog.d(TAG,"String_Node_Str" + packageName + "String_Node_Str"+ userId);
    res=deletePackageLI(packageName,(flags & PackageManager.DELETE_ALL_USERS) != 0 ? UserHandle.ALL : new UserHandle(userId),true,allUsers,perUserInstalled,flags | REMOVE_CHATTY,info,true);
    systemUpdate=info.isRemovedPackageSystemUpdate;
    if (res && !systemUpdate && mPackages.get(packageName) == null) {
      removedForAllUsers=true;
    }
    if (DEBUG_REMOVE)     Slog.d(TAG,"String_Node_Str" + systemUpdate + "String_Node_Str"+ removedForAllUsers);
  }
  if (res) {
    info.sendBroadcast(true,systemUpdate,removedForAllUsers);
    if (systemUpdate) {
      Bundle extras=new Bundle(1);
      extras.putInt(Intent.EXTRA_UID,info.removedAppId >= 0 ? info.removedAppId : info.uid);
      extras.putBoolean(Intent.EXTRA_REPLACING,true);
      sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,packageName,extras,null,null,null);
      sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,packageName,extras,null,null,null);
      sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,null,null,packageName,null,null);
    }
  }
  Runtime.getRuntime().gc();
  if (info.args != null) {
synchronized (mInstallLock) {
      info.args.doPostDeleteLI(true);
    }
  }
  return res ? PackageManager.DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
}

Fixed version (ground truth):
/** 
 * This method is an internal method that could be get invoked either to delete an installed package or to clean up a failed installation. After deleting an installed package, a broadcast is sent to notify any listeners that the package has been installed. For cleaning up a failed installation, the broadcast is not necessary since the package's installation wouldn't have sent the initial broadcast either The key steps in deleting a package are deleting the package information in internal structures like mPackages, deleting the packages base directories through installd updating mSettings to reflect current status persisting settings for later use sending a broadcast if necessary
 */
private int deletePackageX(String packageName,int userId,int flags){
  final PackageRemovedInfo info=new PackageRemovedInfo();
  final boolean res;
  IDevicePolicyManager dpm=IDevicePolicyManager.Stub.asInterface(ServiceManager.getService(Context.DEVICE_POLICY_SERVICE));
  try {
    if (dpm != null && (dpm.packageHasActiveAdmins(packageName,userId) || dpm.isDeviceOwner(packageName))) {
      Slog.w(TAG,"String_Node_Str" + packageName + "String_Node_Str");
      return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
    }
  }
 catch (  RemoteException e) {
  }
  boolean removedForAllUsers=false;
  boolean systemUpdate=false;
  int[] allUsers;
  boolean[] perUserInstalled;
synchronized (mPackages) {
    PackageSetting ps=mSettings.mPackages.get(packageName);
    allUsers=sUserManager.getUserIds();
    perUserInstalled=new boolean[allUsers.length];
    for (int i=0; i < allUsers.length; i++) {
      perUserInstalled[i]=ps != null ? ps.getInstalled(allUsers[i]) : false;
    }
  }
synchronized (mInstallLock) {
    if (DEBUG_REMOVE)     Slog.d(TAG,"String_Node_Str" + packageName + "String_Node_Str"+ userId);
    res=deletePackageLI(packageName,(flags & PackageManager.DELETE_ALL_USERS) != 0 ? UserHandle.ALL : new UserHandle(userId),true,allUsers,perUserInstalled,flags | REMOVE_CHATTY,info,true);
    systemUpdate=info.isRemovedPackageSystemUpdate;
    if (res && !systemUpdate && mPackages.get(packageName) == null) {
      removedForAllUsers=true;
    }
    if (DEBUG_REMOVE)     Slog.d(TAG,"String_Node_Str" + systemUpdate + "String_Node_Str"+ removedForAllUsers);
  }
  if (res) {
    info.sendBroadcast(true,systemUpdate,removedForAllUsers);
    if (systemUpdate) {
      Bundle extras=new Bundle(1);
      extras.putInt(Intent.EXTRA_UID,info.removedAppId >= 0 ? info.removedAppId : info.uid);
      extras.putBoolean(Intent.EXTRA_REPLACING,true);
      sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,packageName,extras,null,null,null);
      sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,packageName,extras,null,null,null);
      sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,null,null,packageName,null,null);
    }
  }
  Runtime.getRuntime().gc();
  if (info.args != null) {
synchronized (mInstallLock) {
      info.args.doPostDeleteLI(true);
    }
  }
  return res ? PackageManager.DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
}