Loading core/java/android/accessibilityservice/AccessibilityService.java +4 −0 Original line number Diff line number Diff line Loading @@ -2560,6 +2560,10 @@ public abstract class AccessibilityService extends Service { IAccessibilityServiceConnection connection = AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId); if (mInfo != null && connection != null) { if (!mInfo.isWithinParcelableSize()) { throw new IllegalStateException( "Cannot update service info: size is larger than safe parcelable limits."); } try { connection.setServiceInfo(mInfo); mInfo = null; Loading core/java/android/accessibilityservice/AccessibilityServiceInfo.java +10 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; import android.hardware.fingerprint.FingerprintManager; import android.os.Build; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; Loading Loading @@ -1225,6 +1226,15 @@ public class AccessibilityServiceInfo implements Parcelable { return 0; } /** @hide */ public final boolean isWithinParcelableSize() { final Parcel parcel = Parcel.obtain(); writeToParcel(parcel, 0); final boolean result = parcel.dataSize() <= IBinder.MAX_IPC_SIZE; parcel.recycle(); return result; } public void writeToParcel(Parcel parcel, int flagz) { parcel.writeInt(eventTypes); parcel.writeStringArray(packageNames); Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -1916,6 +1916,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityServiceInfo accessibilityServiceInfo; try { accessibilityServiceInfo = new AccessibilityServiceInfo(resolveInfo, mContext); if (!accessibilityServiceInfo.isWithinParcelableSize()) { Slog.e(LOG_TAG, "Skipping service " + accessibilityServiceInfo.getResolveInfo().getComponentInfo() + " because service info size is larger than safe parcelable limits."); continue; } if (userState.mCrashedServices.contains(serviceInfo.getComponentName())) { // Restore the crashed attribute. accessibilityServiceInfo.crashed = true; Loading Loading
core/java/android/accessibilityservice/AccessibilityService.java +4 −0 Original line number Diff line number Diff line Loading @@ -2560,6 +2560,10 @@ public abstract class AccessibilityService extends Service { IAccessibilityServiceConnection connection = AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId); if (mInfo != null && connection != null) { if (!mInfo.isWithinParcelableSize()) { throw new IllegalStateException( "Cannot update service info: size is larger than safe parcelable limits."); } try { connection.setServiceInfo(mInfo); mInfo = null; Loading
core/java/android/accessibilityservice/AccessibilityServiceInfo.java +10 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; import android.hardware.fingerprint.FingerprintManager; import android.os.Build; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteException; Loading Loading @@ -1225,6 +1226,15 @@ public class AccessibilityServiceInfo implements Parcelable { return 0; } /** @hide */ public final boolean isWithinParcelableSize() { final Parcel parcel = Parcel.obtain(); writeToParcel(parcel, 0); final boolean result = parcel.dataSize() <= IBinder.MAX_IPC_SIZE; parcel.recycle(); return result; } public void writeToParcel(Parcel parcel, int flagz) { parcel.writeInt(eventTypes); parcel.writeStringArray(packageNames); Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -1916,6 +1916,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityServiceInfo accessibilityServiceInfo; try { accessibilityServiceInfo = new AccessibilityServiceInfo(resolveInfo, mContext); if (!accessibilityServiceInfo.isWithinParcelableSize()) { Slog.e(LOG_TAG, "Skipping service " + accessibilityServiceInfo.getResolveInfo().getComponentInfo() + " because service info size is larger than safe parcelable limits."); continue; } if (userState.mCrashedServices.contains(serviceInfo.getComponentName())) { // Restore the crashed attribute. accessibilityServiceInfo.crashed = true; Loading