Merge "Handle ParcelableException instead of crashing system server"

am: 592266cbf1

Change-Id: I039cf08cb546bc0e84f49437d1c5897ff359f307
This commit is contained in:
Mohammad Samiul Islam
2020-01-16 05:17:24 -08:00
committed by android-build-merger

View File

@@ -41,6 +41,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.ParcelableException;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -414,29 +415,28 @@ public class StagingManager {
} else {
params.installFlags |= PackageManager.INSTALL_DISABLE_VERIFICATION;
}
int apkSessionId = mPi.createSession(
params, originalSession.getInstallerPackageName(),
0 /* UserHandle.SYSTEM */);
PackageInstallerSession apkSession = mPi.getSession(apkSessionId);
try {
int apkSessionId = mPi.createSession(
params, originalSession.getInstallerPackageName(),
0 /* UserHandle.SYSTEM */);
PackageInstallerSession apkSession = mPi.getSession(apkSessionId);
apkSession.open();
for (String apkFilePath : apkFilePaths) {
File apkFile = new File(apkFilePath);
ParcelFileDescriptor pfd = ParcelFileDescriptor.open(apkFile,
ParcelFileDescriptor.MODE_READ_ONLY);
long sizeBytes = pfd.getStatSize();
long sizeBytes = (pfd == null) ? -1 : pfd.getStatSize();
if (sizeBytes < 0) {
Slog.e(TAG, "Unable to get size of: " + apkFilePath);
return null;
}
apkSession.write(apkFile.getName(), 0, sizeBytes, pfd);
}
} catch (IOException e) {
return apkSession;
} catch (IOException | ParcelableException e) {
Slog.e(TAG, "Failure to install APK staged session " + originalSession.sessionId, e);
return null;
}
return apkSession;
}
private boolean commitApkSession(@NonNull PackageInstallerSession apkSession,