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

Commit 62c61340 authored by Hui Peng's avatar Hui Peng Committed by Android (Google) Code Review
Browse files

Merge "Revert "Validate service attr size and type on sdp"" into udc-mainline-prod

parents 32dc59ae b8fd5978
Loading
Loading
Loading
Loading
+11 −25
Original line number Diff line number Diff line
@@ -785,10 +785,8 @@ uint8_t SDP_GetNumDiRecords(const tSDP_DISCOVERY_DB* p_db) {
 *
 ******************************************************************************/
static void SDP_AttrStringCopy(char* dst, const tSDP_DISC_ATTR* p_attr,
                               uint16_t dst_size,
                               uint8_t expected_desc_type) {
  if (dst == NULL || SDP_DISC_ATTR_LEN(p_attr->attr_len_type) != expected_desc_type)
    return;
                               uint16_t dst_size) {
  if (dst == NULL) return;
  if (p_attr) {
    uint16_t len = SDP_DISC_ATTR_LEN(p_attr->attr_len_type);
    if (len > dst_size - 1) {
@@ -838,67 +836,55 @@ uint16_t SDP_GetDiRecord(uint8_t get_record_index,
    /* ClientExecutableURL is optional */
    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_CLIENT_EXE_URL);
    SDP_AttrStringCopy(p_device_info->rec.client_executable_url, p_curr_attr,
                       SDP_MAX_ATTR_LEN, URL_DESC_TYPE);
                       SDP_MAX_ATTR_LEN);

    /* Service Description is optional */
    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_SERVICE_DESCRIPTION);
    SDP_AttrStringCopy(p_device_info->rec.service_description, p_curr_attr,
                       SDP_MAX_ATTR_LEN, TEXT_STR_DESC_TYPE);
                       SDP_MAX_ATTR_LEN);

    /* DocumentationURL is optional */
    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_DOCUMENTATION_URL);
    SDP_AttrStringCopy(p_device_info->rec.documentation_url, p_curr_attr,
                       SDP_MAX_ATTR_LEN, URL_DESC_TYPE);
                       SDP_MAX_ATTR_LEN);

    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_SPECIFICATION_ID);
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
    if (p_curr_attr)
      p_device_info->spec_id = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_VENDOR_ID);
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
    if (p_curr_attr)
      p_device_info->rec.vendor = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_VENDOR_ID_SOURCE);
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
    if (p_curr_attr)
      p_device_info->rec.vendor_id_source = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_PRODUCT_ID);
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
    if (p_curr_attr)
      p_device_info->rec.product = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr =
        SDP_FindAttributeInRec(p_curr_record, ATTR_ID_PRODUCT_VERSION);
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == UINT_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 2)
    if (p_curr_attr)
      p_device_info->rec.version = p_curr_attr->attr_value.v.u16;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;

    p_curr_attr = SDP_FindAttributeInRec(p_curr_record, ATTR_ID_PRIMARY_RECORD);
    if (p_curr_attr &&
        SDP_DISC_ATTR_TYPE(p_curr_attr->attr_len_type) == BOOLEAN_DESC_TYPE &&
        SDP_DISC_ATTR_LEN(p_curr_attr->attr_len_type) >= 1)
    if (p_curr_attr)
      p_device_info->rec.primary_record = (bool)p_curr_attr->attr_value.v.u8;
    else
      result = SDP_ERR_ATTR_NOT_PRESENT;
+3 −9
Original line number Diff line number Diff line
@@ -251,9 +251,7 @@ void sdpu_log_attribute_metrics(const RawAddress& bda,
      case UUID_SERVCLASS_AUDIO_SINK: {
        tSDP_DISC_ATTR* p_attr =
            SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES);
        if (p_attr == nullptr ||
            SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != UINT_DESC_TYPE ||
            SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < 2) {
        if (p_attr == nullptr) {
          break;
        }
        uint16_t supported_features = p_attr->attr_value.v.u16;
@@ -266,9 +264,7 @@ void sdpu_log_attribute_metrics(const RawAddress& bda,
      case UUID_SERVCLASS_MESSAGE_ACCESS: {
        tSDP_DISC_ATTR* p_attr =
            SDP_FindAttributeInRec(p_rec, ATTR_ID_MAP_SUPPORTED_FEATURES);
        if (p_attr == nullptr ||
            SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != UINT_DESC_TYPE ||
            SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < 4) {
        if (p_attr == nullptr) {
          break;
        }
        uint32_t map_supported_features = p_attr->attr_value.v.u32;
@@ -281,9 +277,7 @@ void sdpu_log_attribute_metrics(const RawAddress& bda,
      case UUID_SERVCLASS_PBAP_PSE: {
        tSDP_DISC_ATTR* p_attr =
            SDP_FindAttributeInRec(p_rec, ATTR_ID_PBAP_SUPPORTED_FEATURES);
        if (p_attr == nullptr ||
            SDP_DISC_ATTR_TYPE(p_attr->attr_len_type) != UINT_DESC_TYPE ||
            SDP_DISC_ATTR_LEN(p_attr->attr_len_type) < 4) {
        if (p_attr == nullptr) {
          break;
        }
        uint32_t pbap_supported_features = p_attr->attr_value.v.u32;