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

Commit d86584dc authored by Hyundo Moon's avatar Hyundo Moon
Browse files

Encode phone number when using Uri.withAppendedPath

Bug: 301187296
Test: atest AtPhonebookTest#processCpbrCommand_doesNotCrashWithEncodingNeededNumber
Change-Id: I7f2e8e13b32e701236395e81c6a393d949a97af7
parent 8e555b6a
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -555,11 +555,17 @@ public class AtPhonebook {
                // try caller id lookup
                // TODO: This code is horribly inefficient. I saw it
                // take 7 seconds to process 100 missed calls.
                Cursor c = BluetoothMethodProxy.getInstance().contentResolverQuery(mContentResolver,
                        Uri.withAppendedPath(PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI, number),
                        new String[]{
                                PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE
                        }, null, null, null);
                Cursor c =
                        BluetoothMethodProxy.getInstance()
                                .contentResolverQuery(
                                        mContentResolver,
                                        Uri.withAppendedPath(
                                                PhoneLookup.ENTERPRISE_CONTENT_FILTER_URI,
                                                Uri.encode(number)),
                                        new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup.TYPE},
                                        null,
                                        null,
                                        null);
                if (c != null) {
                    if (c.moveToFirst()) {
                        name = c.getString(0);
+32 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -40,6 +41,7 @@ import com.android.bluetooth.BluetoothMethodProxy;
import com.android.bluetooth.R;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.util.DevicePolicyUtils;
import com.android.internal.telephony.GsmAlphabet;

import org.junit.After;
@@ -284,6 +286,35 @@ public class AtPhonebookTest {
        verify(mNativeInterface).atResponseString(mTestDevice, expected);
    }

    @Test
    public void processCpbrCommand_doesNotCrashWithEncodingNeededNumber() {
        final String encodingNeededNumber = "###0102124";

        Cursor mockCursorOne = mock(Cursor.class);
        when(mockCursorOne.getCount()).thenReturn(1);
        when(mockCursorOne.getColumnIndex(Phone.TYPE)).thenReturn(1); // TypeColumn
        when(mockCursorOne.getColumnIndex(Phone.NUMBER)).thenReturn(2); // numberColumn
        when(mockCursorOne.getColumnIndex(Phone.DISPLAY_NAME)).thenReturn(-1); // nameColumn
        when(mockCursorOne.getInt(1)).thenReturn(Phone.TYPE_WORK);
        when(mockCursorOne.getString(2)).thenReturn(encodingNeededNumber);
        when(mockCursorOne.moveToNext()).thenReturn(false);
        doReturn(mockCursorOne)
                .when(mHfpMethodProxy)
                .contentResolverQuery(
                        any(),
                        eq(DevicePolicyUtils.getEnterprisePhoneUri(mTargetContext)),
                        any(),
                        any(),
                        any());

        mAtPhonebook.mCurrentPhonebook = "ME";
        mAtPhonebook.mCpbrIndex1 = 1;
        mAtPhonebook.mCpbrIndex2 = 2;

        // This call should not crash
        mAtPhonebook.processCpbrCommand(mTestDevice);
    }

    @Test
    public void setCpbrIndex() {
        int index = 1;