Add additional test for attp_build_value_cmd
focusing on security (OOB)
Bug: 295887535
Bug: 315127634
Test: m com.android.btservices
Test: atest net_test_stack_gatt
Ignore-AOSP-First: security
Flag: EXEMPT, Test
Change-Id: I63071c6166b7ca0f3b90a8feadb9133887e26d3a
diff --git a/system/stack/test/gatt/stack_gatt_test.cc b/system/stack/test/gatt/stack_gatt_test.cc
index fe1f474..1466a9c 100644
--- a/system/stack/test/gatt/stack_gatt_test.cc
+++ b/system/stack/test/gatt/stack_gatt_test.cc
@@ -333,3 +333,50 @@
0x1234, 3, (uint8_t*)"abc");
}
}
+
+static void attp_build_value_cmd_small_payload_size(uint8_t op_code) {
+ // payload size too small
+ uint16_t offset_0 = 0;
+ uint16_t handle = 0x1;
+ uint16_t len = 0;
+ uint8_t* p_data = nullptr;
+ uint16_t test_payload_size = gatt_min_value_cmd_size.at(op_code) - 1;
+
+ ASSERT_TRUE(gatt_min_value_cmd_size.find(op_code) !=
+ gatt_min_value_cmd_size.end());
+ test_payload_size = gatt_min_value_cmd_size.at(op_code) - 1;
+
+ BT_HDR* ret = bluetooth::legacy::testing::attp_build_value_cmd(
+ test_payload_size, op_code, handle, offset_0, len, p_data);
+
+ ASSERT_EQ(ret, nullptr);
+}
+
+TEST_F(StackGattTest,
+ attp_build_value_cmd_test_payload_size_less_than_mimimal) {
+ for (auto it = gatt_min_value_cmd_size.begin();
+ it != gatt_min_value_cmd_size.end(); it++) {
+ attp_build_value_cmd_small_payload_size(it->first);
+ }
+}
+
+TEST_F(StackGattTest, attp_build_value_cmd_read_by_type_test_long_data) {
+ // p_data too large and does not fit in pair_len
+ // only for GATT_RSP_READ_BY_TYPE
+ uint16_t offset_0 = 0;
+ uint16_t handle = 0x1;
+ const uint8_t op_code = GATT_RSP_READ_BY_TYPE;
+
+ const int data_size = 255;
+ uint16_t payload_size = data_size + 4;
+
+ uint8_t data[data_size];
+
+ for (int i = 0; i < data_size; i++) {
+ data[i] = 'A';
+ }
+
+ BT_HDR* ret = bluetooth::legacy::testing::attp_build_value_cmd(
+ payload_size, op_code, handle, offset_0, data_size, data);
+ ASSERT_EQ(ret, nullptr);
+}