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

Commit f9f83884 authored by Michal Belusiak's avatar Michal Belusiak
Browse files

PublicBroadcastData: remove exception throw

Ignore invalid Public Broadcast Announcement

Bug: 335154833
Flag: Exempt, trivial fix
Test: atest PublicBroadcastDataTest
Change-Id: I465a4d9fee142a031c3f914cf26d53a7f21c61e8
parent dfd5df58
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -432,6 +432,12 @@ public class BassClientStateMachine extends StateMachine {
                    pbData = PublicBroadcastData.parsePublicBroadcastData(pbAnnouncement);
                }
            }

            if (broadcastId == BassConstants.INVALID_BROADCAST_ID || pbData == null) {
                Log.w(TAG, "Invalid broadcast ID or public broadcast data");
                return false;
            }

            // Check if broadcast name present in scan record and parse
            // null if no name present
            String broadcastName = checkAndParseBroadcastName(scanRecord);
+4 −4
Original line number Diff line number Diff line
@@ -66,8 +66,8 @@ class PublicBroadcastData {

    static PublicBroadcastData parsePublicBroadcastData(byte[] serviceData) {
        if (serviceData == null || serviceData.length < PUBLIC_BROADCAST_SERVICE_DATA_LEN_MIN) {
            Log.e(TAG, "Invalid service data for PublicBroadcastData construction");
            throw new IllegalArgumentException("PublicBroadcastData: serviceData is invalid");
            Log.w(TAG, "Invalid service data for PublicBroadcastData construction");
            return null;
        }
        PublicBroadcastInfo publicBroadcastInfo = new PublicBroadcastInfo();

@@ -93,8 +93,8 @@ class PublicBroadcastData {
        publicBroadcastInfo.metaDataLength = serviceData[offset++];
        if (serviceData.length
                != (publicBroadcastInfo.metaDataLength + PUBLIC_BROADCAST_SERVICE_DATA_LEN_MIN)) {
            Log.e(TAG, "Invalid meta data length for PublicBroadcastData construction");
            throw new IllegalArgumentException("PublicBroadcastData: metaData is invalid");
            Log.w(TAG, "Invalid meta data length for PublicBroadcastData construction");
            return null;
        }
        if (publicBroadcastInfo.metaDataLength != 0) {
            publicBroadcastInfo.metaData = new byte[(int) publicBroadcastInfo.metaDataLength];
+3 −8
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.bluetooth.bass_client;

import static com.google.common.truth.Truth.assertThat;

import static org.junit.Assert.assertThrows;

import android.bluetooth.BluetoothLeBroadcastMetadata;

import org.junit.Test;
@@ -47,22 +45,19 @@ public class PublicBroadcastDataTest {

    @Test
    public void parsePublicBroadcastData() {
        assertThrows(IllegalArgumentException.class, () ->
                PublicBroadcastData.parsePublicBroadcastData(null));
        assertThat(PublicBroadcastData.parsePublicBroadcastData(null)).isNull();

        byte[] serviceDataInvalid = new byte[] {
                (byte) 0x02, // features, non-encrypted, standard quality prsent
        };
        assertThrows(IllegalArgumentException.class, () ->
                PublicBroadcastData.parsePublicBroadcastData(serviceDataInvalid));
        assertThat(PublicBroadcastData.parsePublicBroadcastData(serviceDataInvalid)).isNull();

        byte[] serviceDataInvalid2 = new byte[] {
                (byte) 0x02, // features, non-encrypted, standard quality prsent
                (byte) 0x03,  // metaDataLength
                (byte) 0x06, (byte) 0x07,  // invalid metaData
        };
        assertThrows(IllegalArgumentException.class, () ->
                PublicBroadcastData.parsePublicBroadcastData(serviceDataInvalid2));
        assertThat(PublicBroadcastData.parsePublicBroadcastData(serviceDataInvalid2)).isNull();

        byte[] serviceData = new byte[] {
                (byte) 0x07, // features