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

Commit 3cb0089c authored by Joseph Pirozzo's avatar Joseph Pirozzo Committed by Gerrit Code Review
Browse files

Merge "MapClient parse bad messages"

parents a149ca17 756a1176
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();