已合并
fix : cpy adv devicename to advDevName #11310
wangJE创建于 2025年11月28日
fix : cpy adv devicename to advDevName #11310
已合并
共 4 个文件变更+14-3
| @@ -481,6 +481,11 @@ static int32_t ParseLocalName(const uint8_t *advData, uint8_t advLen, SoftBusBcS | |||
| 481 | DISC_LOGE(DISC_BLE_ADAPTER, "copy local name failed"); | 481 | DISC_LOGE(DISC_BLE_ADAPTER, "copy local name failed"); |
| 482 | return SOFTBUS_MEM_ERR; | 482 | return SOFTBUS_MEM_ERR; |
| 483 | } | 483 | } |
| 484 | + if (dst->advDevName[0] == '\0' && | ||
| 485 | + memcpy_s(dst->advDevName, sizeof(dst->advDevName), &advData[index + 1], len - 1) != EOK) { | ||
| 486 | + DISC_LOGE(DISC_BLE_ADAPTER, "copy adv device name failed"); | ||
| 487 | + return SOFTBUS_MEM_ERR; | ||
| 488 | + } | ||
| 484 | return SOFTBUS_OK; | 489 | return SOFTBUS_OK; |
| 485 | } | 490 | } |
| 486 | 491 | ||
| @@ -716,11 +716,15 @@ static int32_t BuildBcInfoCommon(const SoftBusBcScanResult *reportData, Broadcas | |||
| 716 | bcInfo->rssi = reportData->rssi; | 716 | bcInfo->rssi = reportData->rssi; |
| 717 | bcInfo->addrType = reportData->addrType; | 717 | bcInfo->addrType = reportData->addrType; |
| 718 | 718 | ||
| 719 | - int32_t ret = memcpy_s(bcInfo->addr.addr, BC_ADDR_MAC_LEN, reportData->addr.addr, SOFTBUS_ADDR_MAC_LEN); | 719 | + errno_t ret = memcpy_s(bcInfo->addr.addr, BC_ADDR_MAC_LEN, reportData->addr.addr, SOFTBUS_ADDR_MAC_LEN); |
| 720 | - DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_MEM_ERR, DISC_BROADCAST, "memcpy addr failed"); | 720 | + DISC_CHECK_AND_RETURN_RET_LOGE(ret == EOK, SOFTBUS_MEM_ERR, DISC_BROADCAST, "memcpy addr failed"); |
| 721 | 721 | ||
| 722 | ret = memcpy_s(bcInfo->localName, BC_LOCAL_NAME_LEN_MAX, reportData->localName, SOFTBUS_LOCAL_NAME_LEN_MAX); | 722 | ret = memcpy_s(bcInfo->localName, BC_LOCAL_NAME_LEN_MAX, reportData->localName, SOFTBUS_LOCAL_NAME_LEN_MAX); |
| 723 | - DISC_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_MEM_ERR, DISC_BROADCAST, "memcpy localName failed"); | 723 | + DISC_CHECK_AND_RETURN_RET_LOGE(ret == EOK, SOFTBUS_MEM_ERR, DISC_BROADCAST, "memcpy localName failed"); |
| 724 | + | ||
| 725 | + ret = memcpy_s(bcInfo->advDevName, sizeof(bcInfo->advDevName), | ||
| 726 | + reportData->advDevName, sizeof(reportData->advDevName)); | ||
| 727 | + DISC_CHECK_AND_RETURN_RET_LOGE(ret == EOK, SOFTBUS_MEM_ERR, DISC_BROADCAST, "memcpy advName failed"); | ||
| 724 | 728 | ||
| 725 | return SOFTBUS_OK; | 729 | return SOFTBUS_OK; |
| 726 | } | 730 | } |
| @@ -122,6 +122,7 @@ typedef struct { | |||
| 122 | uint8_t addrType; | 122 | uint8_t addrType; |
| 123 | SoftbusMacAddr addr; | 123 | SoftbusMacAddr addr; |
| 124 | uint8_t localName[SOFTBUS_LOCAL_NAME_LEN_MAX]; | 124 | uint8_t localName[SOFTBUS_LOCAL_NAME_LEN_MAX]; |
| 125 | + char advDevName[SOFTBUS_LOCAL_NAME_LEN_MAX]; | ||
| 125 | bool nameTruncated; | 126 | bool nameTruncated; |
| 126 | int8_t *deviceName; | 127 | int8_t *deviceName; |
| 127 | SoftbusBroadcastData data; | 128 | SoftbusBroadcastData data; |
| @@ -408,6 +408,7 @@ typedef struct { | |||
| 408 | int8_t rssi; | 408 | int8_t rssi; |
| 409 | uint8_t addrType; | 409 | uint8_t addrType; |
| 410 | uint8_t localName[BC_LOCAL_NAME_LEN_MAX]; | 410 | uint8_t localName[BC_LOCAL_NAME_LEN_MAX]; |
| 411 | + char advDevName[BC_LOCAL_NAME_LEN_MAX]; | ||
| 411 | BcMacAddr addr; | 412 | BcMacAddr addr; |
| 412 | int8_t *deviceName; | 413 | int8_t *deviceName; |
| 413 | bool nameTruncated; | 414 | bool nameTruncated; |
🤖 AI 代码检视意见
类别: 🛡️ Reliability 严重级别: High 文件:
adapter/common/net/bluetooth/broadcast/adapter/ble/src/softbus_ble_utils.c行号: L484-L488问题描述: 代码检查dst->advDevName[0] == '\0'但该缓冲区未被显式初始化。如果结构体在栈上分配,可能包含随机值,导致条件判断不可靠。在特定编译器优化或内存对齐情况下,可能误判或读取到脏数据。
修复建议: 确保SoftBusBcScanResult结构体在使用前被正确初始化。建议在结构体定义处添加构造函数或使用memset清零:
// 在分配SoftBusBcScanResult时 SoftBusBcScanResult scanResult = {0}; // 全部初始化为0 // 或者确保dst已被清零 memset(dst, 0, sizeof(SoftBusBcScanResult));此评论由 OpenHarmony Insight Review Lite 自动生成