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

Commit 9a701e05 authored by Kihong Seong's avatar Kihong Seong
Browse files

Throw exception when writing characteristic larger than max attribute

value

In BluetoothGatt.writeCharacteristic(), throw IllegalArgumentException
is longer than max length of an attribute value. The max length of an
attribute value is defined in gatt_api.h as 512, and is used here. CTS
test for this change is linked with the same topic to this CL.

Bug: 286892994
Test: atest CtsBluetoothTestCases
Change-Id: Ie9009922b89403d10546b046346dac7f26d1643e
parent 0b969b04
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -94,6 +94,8 @@ public final class BluetoothGatt implements BluetoothProfile {

    private static final int WRITE_CHARACTERISTIC_MAX_RETRIES = 5;
    private static final int WRITE_CHARACTERISTIC_TIME_TO_WAIT = 10; // milliseconds
    // Max length of an attribute value, defined in gatt_api.h
    private static final int GATT_MAX_ATTR_LEN = 512;

    private List<BluetoothGattService> mServices;

@@ -1438,6 +1440,10 @@ public final class BluetoothGatt implements BluetoothProfile {
        if (value == null) {
            throw new IllegalArgumentException("value must not be null");
        }
        if (value.length > GATT_MAX_ATTR_LEN) {
            throw new IllegalArgumentException(
                    "notification should not be longer than max length of an attribute value");
        }
        if (VDBG) Log.d(TAG, "writeCharacteristic() - uuid: " + characteristic.getUuid());
        if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE) == 0
                && (characteristic.getProperties()