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