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

Commit 19d420f5 authored by Joseph Pirozzo's avatar Joseph Pirozzo Committed by Automerger Merge Worker
Browse files

Merge "MapClient parse bad messages" am: 3cb0089c

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Bluetooth/+/1621584

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I11a670f0ed20d22f7f600f1edae9c80515e77a9e
parents da176ea5 3cb0089c
Loading
Loading
Loading
Loading
+51 −13
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@ class MapClientContent {
        mSubscriptionManager = (SubscriptionManager) mContext
                .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        mSubscriptionManager
                .addSubscriptionInfoRecord(device.getAddress(), /*device.getName()*/"TEST", 0,
                .addSubscriptionInfoRecord(mDevice.getAddress(), mDevice.getName(), 0,
                        SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM);
        SubscriptionInfo info = mSubscriptionManager
                .getActiveSubscriptionInfoForIcc(mDevice.getAddress());
@@ -156,7 +156,7 @@ class MapClientContent {
            ArrayList<VCardEntry> recipients = message.getRecipients();
            if (recipients != null && !recipients.isEmpty()) {
                mPhoneNumber = PhoneNumberUtils.extractNetworkPortion(
                        recipients.get(0).getPhoneList().get(0).getNumber());
                        getFirstRecipientNumber(message));
            }
        } else {
            mPhoneNumber = PhoneNumberUtils.extractNetworkPortion(getOriginatorNumber(message));
@@ -192,7 +192,11 @@ class MapClientContent {
        if (INBOX_PATH.equals(message.getFolder())) {
            recipients = getOriginatorNumber(message);
        } else {
            recipients = message.getRecipients().get(0).getPhoneList().get(0).getNumber();
            recipients = getFirstRecipientNumber(message);
            if (recipients == null) {
                logD("invalid recipients");
                return;
            }
        }
        logV("Received SMS from Number " + recipients);
        String messageContent;
@@ -379,11 +383,22 @@ class MapClientContent {
        return mResolver.insert(Mms.CONTENT_URI, mmsValues);
    }

    /**
     * cleanUp
     * clear the subscription info and content on shutdown
     */
    void cleanUp() {
        clearMessages();
        mSubscriptionManager.removeSubscriptionInfoRecord(mDevice.getAddress(),
                    SubscriptionManager.SUBSCRIPTION_TYPE_REMOTE_SIM);
    }


    /**
     * clearMessages
     * clean up the content provider on startup and shutdown
     * clean up the content provider on startup
     */
    void clearMessages() {
    private void clearMessages() {
        mResolver.unregisterContentObserver(mContentObserver);
        mResolver.delete(Sms.CONTENT_URI, Sms.SUBSCRIPTION_ID + " =? ",
                new String[]{Integer.toString(mSubscriptionId)});
@@ -403,8 +418,14 @@ class MapClientContent {
            messageContacts.add(originator);
        }
        getRecipientsFromMessage(message, messageContacts);
        // If there is only one contact don't remove it.
        if (messageContacts.isEmpty()) {
            return Telephony.Threads.COMMON_THREAD;
        } else if (messageContacts.size() > 1) {
            messageContacts.removeIf(number -> (PhoneNumberUtils.compareLoosely(number,
                    mPhoneNumber)));
        }

        messageContacts.removeIf(number -> (PhoneNumberUtils.compareLoosely(number, mPhoneNumber)));
        logV("Contacts = " + messageContacts.toString());
        return Telephony.Threads.getOrCreateThreadId(mContext, messageContacts);
    }
@@ -413,7 +434,7 @@ class MapClientContent {
        List<VCardEntry> recipients = message.getRecipients();
        for (VCardEntry recipient : recipients) {
            List<VCardEntry.PhoneData> phoneData = recipient.getPhoneList();
            if (phoneData != null && phoneData.size() > 0) {
            if (phoneData != null && !phoneData.isEmpty()) {
                messageContacts
                        .add(PhoneNumberUtils.extractNetworkPortion(phoneData.get(0).getNumber()));
            }
@@ -422,15 +443,32 @@ class MapClientContent {

    private String getOriginatorNumber(Bmessage message) {
        VCardEntry originator = message.getOriginator();
        if (originator != null) {
        if (originator == null) {
            return null;
        }

        List<VCardEntry.PhoneData> phoneData = originator.getPhoneList();
            if (phoneData != null && phoneData.size() > 0) {
        if (phoneData == null || phoneData.isEmpty()) {
            return null;
        }

        return PhoneNumberUtils.extractNetworkPortion(phoneData.get(0).getNumber());
    }

    private String getFirstRecipientNumber(Bmessage message) {
        List<VCardEntry> recipients = message.getRecipients();
        if (recipients == null || recipients.isEmpty()) {
            return null;
        }

        List<VCardEntry.PhoneData> phoneData = recipients.get(0).getPhoneList();
        if (phoneData == null || phoneData.isEmpty()) {
            return null;
        }

        return phoneData.get(0).getNumber();
    }

    /**
     * addThreadContactToEntries
     * utilizing the thread id fill in the appropriate fields of bmsg with the intended recipients
+3 −2
Original line number Diff line number Diff line
@@ -287,7 +287,8 @@ class MceStateMachine extends StateMachine {
                    Log.d(TAG, "Scheme " + contact.getScheme());
                }
                if (PhoneAccount.SCHEME_TEL.equals(contact.getScheme())) {
                    if (contact.getPath().contains(Telephony.Threads.CONTENT_URI.toString())) {
                    String path = contact.getPath();
                    if (path != null && path.contains(Telephony.Threads.CONTENT_URI.toString())) {
                        mDatabase.addThreadContactsToEntries(bmsg, contact.getLastPathSegment());
                    } else {
                        VCardEntry destEntry = new VCardEntry();
@@ -623,7 +624,7 @@ class MceStateMachine extends StateMachine {

        @Override
        public void exit() {
            mDatabase.clearMessages();
            mDatabase.cleanUp();
            mPreviousState = BluetoothProfile.STATE_CONNECTED;
        }

+23 −4
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ public class MapClientContentTest {
        Assert.assertEquals(2, mMockSmsContentProvider.mContentValues.size());
        Assert.assertEquals(0, mMockMmsContentProvider.mContentValues.size());

        mMapClientContent.clearMessages();
        mMapClientContent.cleanUp();
        Assert.assertEquals(0, mMockSmsContentProvider.mContentValues.size());
    }

@@ -191,7 +191,7 @@ public class MapClientContentTest {
        mMapClientContent.storeMessage(mTestMessage2, mTestMessage1Handle, mTestMessage1Timestamp);
        Assert.assertEquals(2, mMockMmsContentProvider.mContentValues.size());

        mMapClientContent.clearMessages();
        mMapClientContent.cleanUp();
        Assert.assertEquals(0, mMockMmsContentProvider.mContentValues.size());
    }

@@ -209,7 +209,7 @@ public class MapClientContentTest {
        mMapClientContent.storeMessage(mTestMessage2, mTestMessage2Handle, mTestMessage1Timestamp);
        Assert.assertEquals(2, mMockMmsContentProvider.mContentValues.size());

        mMapClientContent.clearMessages();
        mMapClientContent.cleanUp();
        Assert.assertEquals(0, mMockMmsContentProvider.mContentValues.size());
    }

@@ -229,7 +229,7 @@ public class MapClientContentTest {

        mMapClientContent.markRead(mTestMessage1Handle);

        mMapClientContent.clearMessages();
        mMapClientContent.cleanUp();
        Assert.assertEquals(0, mMockMmsContentProvider.mContentValues.size());
    }

@@ -305,6 +305,25 @@ public class MapClientContentTest {
        Assert.assertEquals("5551212", mMapClientContent.mPhoneNumber);
    }

    /**
     * Test to validate that some poorly formatted messages don't crash.
     */
    @Test
    public void testStoreBadMessage() {
        mMapClientContent = new MapClientContent(mMockContext, mCallbacks, mTestDevice);
        mTestMessage1 = new Bmessage();
        mTestMessage1.setBodyContent("HelloWorld");
        mTestMessage1.setType(Bmessage.Type.SMS_GSM);
        mTestMessage1.setFolder("telecom/msg/sent");
        mMapClientContent.storeMessage(mTestMessage1, mTestMessage1Handle, mTestMessage1Timestamp);

        mTestMessage2 = new Bmessage();
        mTestMessage2.setBodyContent("HelloWorld");
        mTestMessage2.setType(Bmessage.Type.MMS);
        mTestMessage2.setFolder("telecom/msg/inbox");
        mMapClientContent.storeMessage(mTestMessage2, mTestMessage2Handle, mTestMessage1Timestamp);
    }

    void createTestMessages() {
        mOriginator = new VCardEntry();
        VCardProperty property = new VCardProperty();