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

Commit aa16ca21 authored by Marcus Hagerott's avatar Marcus Hagerott
Browse files

Guard against null cursor when querying SIM

Test: ran GoogleContactsTests

Bug 33272160

Change-Id: I177e63d489b566d55aa2009af2728279a8aea297
parent 614d8120
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -274,6 +274,10 @@ public class SimContactDaoImpl extends SimContactDao {
    private ArrayList<SimContact> loadFrom(Uri uri) {
        synchronized (SIM_READ_LOCK) {
            final Cursor cursor = mResolver.query(uri, null, null, null, null);
            if (cursor == null) {
                // Assume null means there are no SIM contacts.
                return new ArrayList<>(0);
            }

            try {
                return loadFromCursor(cursor);
+26 −0
Original line number Diff line number Diff line
@@ -26,14 +26,19 @@ import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import android.content.ContentProvider;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.Context;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.net.Uri;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -701,6 +706,27 @@ public class SimContactDaoTests {
                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
            assertTrue(result.isEmpty());
        }

        @Test
        public void returnsEmptyListForNullCursor() {
            mContext = mock(MockContext.class);
            final MockContentResolver mockResolver = new MockContentResolver();
            final ContentProvider mockProvider = mock(android.test.mock.MockContentProvider.class);
            when(mockProvider.query(any(Uri.class), any(String[].class), anyString(),
                    any(String[].class), anyString()))
                    .thenReturn(null);
            when(mockProvider.query(any(Uri.class), any(String[].class), anyString(),
                    any(String[].class), anyString(), any(CancellationSignal.class)))
                    .thenReturn(null);

            mockResolver.addProvider("icc", mockProvider);
            when(mContext.getContentResolver()).thenReturn(mockResolver);

            final SimContactDao sut = SimContactDao.create(mContext);
            final List<SimContact> result = sut
                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
            assertTrue(result.isEmpty());
        }
    }

    @LargeTest