合并受阻
感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。
Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.


start build


首次触发
门禁构建开始,包含静态检查、代码编译和测试【dayu200编译, hispark_pegasus测试, x86_64_virt编译, hispark_pegasus编译, dayu600_7885测试, hispark_pegasus_3863测试, hispark_taurus_Linux编译, hispark_pegasus_3863编译, dayu600_7885编译, dayu200测试, master_inner_build编译, ohos-host_mini_tdd编译, dayu200_tdd编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a881dfc64650f998b57d4e4/runlist


PR 审查报告:#5564 - fix wlan1 MAC error
仓库:OpenHarmony/communication_wifi
PR 地址:https://gitcode.com/openharmony/communication_wifi/merge_requests/5564
作者:Glenn (ChirsDejong)
目标分支:master
PR SHA:1ac6f34b145dd422d4fea9acf4785ab87829bae7
状态:open
标签:waiting_on_author、dco检查成功
CI 状态:
- ✅ DCO 检查成功
- ✅ 冲突检查通过
- ⚠️ 未见编译/静态检查结果标签
变更概要
本 PR 修复 wlan1 随机 MAC 生成错误(2 个文件,+20/-1):
wifi_randommac_helper.cpp(+1/-1):
unsigned int outputHexMac = inputHexMac ^ WIFI2_RANDOM_MAC_MASK;
std::stringstream outSsMac;
- outSsMac << std::hex <<outputHexMac;
+ outSsMac << std::hex << std::setw(WIFI2_RANDOM_MAC_CHANGE_LEN) << std::setfill('0') << outputHexMac;
wifi2RandomMac.replace(WIFI2_RANDOM_MAC_CHANGE_POS, WIFI2_RANDOM_MAC_CHANGE_LEN, outSsMac.str());
wifi_randommac_helper_test.cpp(+19):新增 GetWifi2RandomMac_001 用例,覆盖 4 组边界值(80→00、8f→0f、00→80、7f→ff,即高 nibble 翻转 + 前导零补位)。
问题详情
⚠️主要
1. 需确认 <iomanip> 头文件已包含
位置:wifi/services/wifi_standard/wifi_framework/wifi_toolkit/utils/wifi_randommac_helper.cpp
描述:本次修复新增使用 std::setw / std::setfill,这两个操纵符声明于 <iomanip> 头文件。diff 中未见新增 #include <iomanip>,若该文件此前未间接引入(部分标准库实现会经 <iostream>/<sstream> 传递包含,但标准不保证),将导致编译失败。
影响:编译失败(若头文件缺失)。
修复建议:确认并显式包含:
#include <iomanip>
2. setw 仅设最小宽度,超长时仍会破坏 MAC 格式
位置:同上
描述:std::setw 保证输出至少 WIFI2_RANDOM_MAC_CHANGE_LEN 位(不足补零),但不限制上限。若 outputHexMac 超过 CHANGE_LEN 位十六进制(如 0x1ff → "1ff"),replace(pos, len, str) 会用更长的字符串替换,导致 MAC 字符串变长移位、格式损坏。当前输入域(单字节 MAC 段异或 0x80 掩码,最大 0xff)下不会触发,但依赖隐式前提。
影响:当前无实际影响;若后续掩码/输入域变化则引入隐患。
修复建议:增加显式约束(防御性):
unsigned int outputHexMac = inputHexMac ^ WIFI2_RANDOM_MAC_MASK;
if (outputHexMac > 0xff) { // 超出单字节段可表示范围
WIFI_LOGE("GetWifi2RandomMac: outputHexMac out of range: %{public}x", outputHexMac);
return false;
}
std::stringstream outSsMac;
outSsMac << std::hex << std::setw(WIFI2_RANDOM_MAC_CHANGE_LEN) << std::setfill('0') << outputHexMac;
💡建议
3. 修复本身正确
outputHexMac 小于 CHANGE_LEN 位时(如 0x0f → "f"),原代码 replace 会用短字符串替换,导致 MAC 形如 f2:5a:ab:f:de:99(字段错位/变短)——正是"wlan1 MAC error"根因。setw + setfill('0') 补足前导零后,replace 长度恒定,修复精准。
4. 测试建议补充长度不变式
当前 4 组用例覆盖了补零边界,建议追加断言验证 MAC 总长度不变(防止未来回归出"变长替换"类问题):
mac = "f2:5a:ab:80:de:99";
EXPECT_TRUE(WifiRandomMacHelper::GetWifi2RandomMac(mac));
EXPECT_EQ(mac.size(), 17); // "xx:xx:xx:xx:xx:xx"
5. 其他小项
- 修改行已顺带修正
<<outputHexMac缺空格问题(良好); - 测试文件末尾无换行(既有问题,可顺带修复)。
总体评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 功能正确性 | 7/10 | 修复正确,存在头文件包含疑点 |
| 代码质量 | 7/10 | 改动精准 |
| 安全性 | 8/10 | 无安全影响 |
| 可维护性 | 7/10 | 有测试 |
| 测试充分性 | 7/10 | 边界值覆盖较好,可加长度不变式 |
| 综合评分 | 7/10 |
审查结论
建议操作:⚠️ 有条件合并
建议修复:
- 问题 1:确认/补充
#include <iomanip>(关键,避免编译失败); - 问题 2:可加
outputHexMac范围防御(非阻塞)。
优点:
- 根因定位准确(短十六进制字符串导致
replace变长替换) - 修复方式标准(
setw/setfill固定宽度) - 新增测试覆盖 4 组关键边界值
- DCO 检查通过


代码门禁未通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a881dfc64650f998b57d4e4/runlist
静态检查:
| # | check type | result | report |
|---|---|---|---|
| 1 | codeCheck | pass | >>> |
编译测试:
| # | Device | build result | test result | package |
|---|---|---|---|---|
| 1 | hispark_taurus_Linux | success | NA | >>> |
| 2 | dayu200 | failed(compile failed) | NA | >>> |
| 3 | dayu200_tdd | failed(compile failed) | NA | >>> |
| 4 | hispark_pegasus | success | success | >>> |
| 5 | master_inner_build | failed(pipeline running timeout) | NA | >>> |
| 6 | ohos-host_mini_tdd | success | NA | >>> |
| 7 | dayu600_7885 | success | success | >>> |
| 8 | x86_64_virt | success | NA | >>> |
| 9 | hispark_pegasus_3863 | success | success | >>> |


start build


上次构建已超过12小时,重新全量验证,重置所有关联PR的验证状态
门禁构建开始,包含静态检查、代码编译和测试【hispark_pegasus编译, dayu600_7885测试, hispark_pegasus_3863编译, ohos-host_mini_tdd编译, hispark_pegasus测试, dayu200编译, hispark_taurus_Linux编译, dayu200测试, hispark_pegasus_3863测试, master_inner_build编译, dayu600_7885编译, x86_64_virt编译, dayu200_tdd编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a89127964650f998b9768b1/runlist


代码门禁未通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a89127964650f998b9768b1/runlist
静态检查:
| # | check type | result | report |
|---|---|---|---|
| 1 | codeCheck | pass | >>> |
编译测试:
| # | Device | build result | test result | package |
|---|---|---|---|---|
| 1 | hispark_taurus_Linux | success | NA | >>> |
| 2 | dayu200 | success | success | >>> |
| 3 | dayu200_tdd | success | NA | >>> |
| 4 | hispark_pegasus | success | success | >>> |
| 5 | master_inner_build | success | NA | >>> |
| 6 | ohos-host_mini_tdd | success | NA | >>> |
| 7 | dayu600_7885 | success | success | >>> |
| 8 | x86_64_virt | failed(compile failed) | NA | >>> |
| 9 | hispark_pegasus_3863 | success | success | >>> |


fix wlan1 MAC error