已开启
fix wlan1 MAC error #5564
fix wlan1 MAC error #5564
已开启
Glenn创建于 1 天前
Glenn
Glenn
1 天前

fix wlan1 MAC error

likedislike
合并受阻
GlennGlenn
1 天前 关联了issue:[Bug]: wlan1 MAC error
openharmony_ciopenharmony_ci成员
1 天前 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
1 天前 评论:

感谢提交 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.

likedislike
openharmony_ciopenharmony_ci成员
1 天前 添加了label:dco检查成功
Glenn
Glenn
1 天前 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
1 天前 评论:

首次触发
门禁构建开始,包含静态检查、代码编译和测试【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

likedislike
wujunwujun成员
1 天前 通过审查
LisaMessi
1 天前 评论:

PR 审查报告:#5564 - fix wlan1 MAC error

仓库:OpenHarmony/communication_wifi
PR 地址https://gitcode.com/openharmony/communication_wifi/merge_requests/5564
作者:Glenn (ChirsDejong)
目标分支:master
PR SHA1ac6f34b145dd422d4fea9acf4785ab87829bae7
状态:open
标签waiting_on_authordco检查成功

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→008f→0f00→807f→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 检查通过
likedislike
openharmony_ciopenharmony_ci成员
1 天前 添加了label:编译失败
openharmony_ciopenharmony_ci成员
1 天前 添加了label:静态检查成功
openharmony_ciopenharmony_ci成员
1 天前 添加了label:冒烟测试失败
openharmony_ci
openharmony_ci成员
1 天前 评论:

代码门禁未通过
您可以通过如下链接查看门禁报告: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 >>>

likedislike
Glenn
Glenn
14 小时前 评论:

start build

likedislike
openharmony_ciopenharmony_ci成员
14 小时前 删除了label:编译失败
openharmony_ciopenharmony_ci成员
14 小时前 删除了label:静态检查成功
openharmony_ciopenharmony_ci成员
14 小时前 删除了label:冒烟测试失败
openharmony_ci
openharmony_ci成员
14 小时前 评论:

上次构建已超过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

likedislike
openharmony_ciopenharmony_ci成员
13 小时前 添加了label:编译失败
openharmony_ciopenharmony_ci成员
13 小时前 添加了label:静态检查成功
openharmony_ciopenharmony_ci成员
13 小时前 添加了label:冒烟测试成功
openharmony_ci
openharmony_ci成员
13 小时前 评论:

代码门禁未通过
您可以通过如下链接查看门禁报告: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 >>>

likedislike