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

Commit 98e33c93 authored by Matías Hernández's avatar Matías Hernández Committed by Automerger Merge Worker
Browse files

Merge "Forbid granting access to NLSes with too-long component names" into...

Merge "Forbid granting access to NLSes with too-long component names" into sc-dev am: a322492b am: eb8bc82a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23709052



Change-Id: I53a3646bc6822c928e0b4d1d84a95378fb4bb560
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents edeff932 eb8bc82a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -561,6 +561,12 @@ public class NotificationManager {
     */
    public static final int BUBBLE_PREFERENCE_SELECTED = 2;

    /**
     * Maximum length of the component name of a registered NotificationListenerService.
     * @hide
     */
    public static int MAX_SERVICE_COMPONENT_NAME_LENGTH = 500;

    @UnsupportedAppUsage
    private static INotificationManager sService;

+5 −0
Original line number Diff line number Diff line
@@ -5258,6 +5258,11 @@ public class NotificationManagerService extends SystemService {
                boolean granted, boolean userSet) {
            Objects.requireNonNull(listener);
            checkNotificationListenerAccess();
            if (granted && listener.flattenToString().length()
                    > NotificationManager.MAX_SERVICE_COMPONENT_NAME_LENGTH) {
                throw new IllegalArgumentException(
                        "Component name too long: " + listener.flattenToString());
            }
            if (!userSet && isNotificationListenerAccessUserSet(listener)) {
                // Don't override user's choice
                return;
+5 −1
Original line number Diff line number Diff line
@@ -1049,7 +1049,11 @@ public class VrManagerService extends SystemService

        for (ComponentName c : possibleServices) {
            if (Objects.equals(c.getPackageName(), pkg)) {
                try {
                    nm.setNotificationListenerAccessGrantedForUser(c, userId, true);
                } catch (Exception e) {
                    Slog.w(TAG, "Could not grant NLS access to package " + pkg, e);
                }
            }
        }
    }
+25 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;

import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyLong;
@@ -3167,6 +3168,30 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
                any(), anyInt(), anyBoolean(), anyBoolean(), anyBoolean());
    }

    @Test
    public void testSetListenerAccessForUser_grantWithNameTooLong_throws() {
        UserHandle user = UserHandle.of(mContext.getUserId() + 10);
        ComponentName c = new ComponentName("com.example.package",
                com.google.common.base.Strings.repeat("Blah", 150));

        assertThrows(IllegalArgumentException.class,
                () -> mBinderService.setNotificationListenerAccessGrantedForUser(
                        c, user.getIdentifier(), /* enabled= */ true, true));
    }

    @Test
    public void testSetListenerAccessForUser_revokeWithNameTooLong_okay() throws Exception {
        UserHandle user = UserHandle.of(mContext.getUserId() + 10);
        ComponentName c = new ComponentName("com.example.package",
                com.google.common.base.Strings.repeat("Blah", 150));

        mBinderService.setNotificationListenerAccessGrantedForUser(
                c, user.getIdentifier(), /* enabled= */ false, true);

        verify(mListeners).setPackageOrComponentEnabled(
                c.flattenToString(), user.getIdentifier(), true, /* enabled= */ false, true);
    }

    @Test
    public void testSetAssistantAccessForUser() throws Exception {
        UserInfo ui = new UserInfo();