已合并
fix : cpy adv devicename to advDevName #11310
fix : cpy adv devicename to advDevName #11310
已合并
wangJE创建于 2025年11月28日
共 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+ }
Marion
MarionMarion2025年11月29日

🤖 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 自动生成

likedislike
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;