2024-03-05 02:34:03 +00:00
### 相关的Issue
### 原因(目的、解决的问题等)
### 描述(做了什么,变更了什么)
2024-04-18 09:23:51 +00:00
### 验证结果(新增、改动、可能影响的功能)
2024-04-18 09:57:27 +00:00
2024-04-18 09:04:16 +00:00
### 日志规范自检:
2024-05-11 03:07:34 +00:00
- [ ] 【规则】高频代码的正常流程中禁止打印日志
- [ ] 【规则】在基本不可能发生的点必须要打印日志
- [ ] 【规则】事件记录的日志使用who do what 主谓宾的形式打印
- [ ] 【规则】状态变化的日志打印使用state_name:s1->s2, reason:msg的形式打印
- [ ] 【规则】参数值的日志打印使用name1=value1, name2=value2…的形式打印
- [ ] 【规则】代码运行成功的日志使用xxx successful的形式打印
- [ ] 【规则】代码运行失败的日志使用xxx failed, please xxx的形式打印
- [ ] 【规则】错误码禁止返回SOFTBUS_ERR
2024-04-18 09:04:16 +00:00
### 安全编码自检:
- [ ] 【指针】禁止对指针进行逻辑或位运算, 对指针求sizeof需确认, 指针解引用时需确认是否存在空指针解引用问题;
- [ ] 【指针】IPC流程中ReadCString、ReadRawData等结果必须判空;
- [ ] 【临时变量】指针变量、表示资源描述符的变量、bool变量初始化必须赋初值;
- [ ] 【数组下标】数组下标需要确认是否越界,如果下标来自外部输入,必须校验合法性;
- [ ] 【锁管理】加锁后必须释放锁, SoftBusMutexLock与SoftBusMutexUnlock成对使用, 并确认锁变量一致;
- [ ] 【fd管理】fd申请后必须关闭, SoftBusSocketCreate与SoftBusSocketClose/SoftBusSocketShutDown成对使用;
- [ ] 【内存管理】内存申请前必须对内存大小进行合法性校验;
- [ ] 【内存管理】内存申请后必须释放, SoftBusMalloc/SoftBusCalloc与SoftBusFree成对使用;
- [ ] 【内存管理】内存申请后必须判空,判断内存申请是否成功;
- [ ] 【内存管理】全局变量释放内存后必须置空,循环体中释放变量内存后确认是否需要置空;
- [ ] 【内存管理】正则表达式构造后需释放资源, regcomp/regexec与regfree必须成对使用;
2024-04-18 09:56:05 +00:00
- [ ] 【内存管理】json使用需释放内存, cJSON_Parse与cJSON_Delete, JSON_PrintUnformatted与JSON_Free成对使用;
2024-04-18 09:04:16 +00:00
- [ ] 【内存管理】匿名化打印接口Anonymize与AnonymizeFree必须成对使用;
2024-05-11 03:07:34 +00:00
- [ ] 【内存管理】strdup使用需要注意内存释放;
2024-05-11 07:49:19 +00:00
- [ ] 【内存管理】realpath使用时如果resolved_path为NULL需要注意内存释放;
2024-05-11 03:07:34 +00:00
- [ ] 【敏感信息】禁止打印密钥、文件路径、内存地址、udidhash、设备名称、账号id等敏感信息;
2024-04-18 09:04:16 +00:00
- [ ] 【敏感信息】堆、栈密钥使用后必须清零;
- [ ] 【敏感信息】禁止不作匿名化直接打印udid/networkid/uuid/ip/mac等敏感信息;
- [ ] 【整数运算】整数之间运算时必须严格检查, 确保不会出现溢出、反转、除0;
- [ ] 【整数运算】禁止对有符号整数进行位操作符运算;
- [ ] 【循环变量】无符号数作为循环变量需确认是否存在死循环问题;
- [ ] 【循环变量】循环次数如果受外部数据控制,需要检验其合法性;
- [ ] 【安全函数】安全函数必须检查返回值,并进行正确处理;
- [ ] 【安全函数】安全函数目标缓冲区大小入参与目标缓冲区实际大小必须一致;
- [ ] 【权限校验】新增sdk IPC接口必须有权限校验流程, 校验方案需经过MDEG评审;
- [ ] 【外部输入校验】外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验;
2024-06-05 06:50:36 +00:00
- [ ] 【外部输入校验】按TLV格式解析时需校验解析长度值是否小于等于缓冲区实际值, 并校验是否符合业务数据范围;
2024-05-11 03:07:34 +00:00
- [ ] 【外部输入校验】解析数据后拷贝时需校验源buffer实际缓冲区大小, 避免越界读写;
2024-04-18 09:56:05 +00:00
- [ ] 【外部输入校验】新增外部输入处理需考虑完整校验方案, 方案需经过MDEG评审, 并有相应fuzz、UT用例;
2024-04-18 09:04:16 +00:00
- [ ] 【常见问题】修改单个函数时, 如果涉及新增异常返回分支, 必须排查是否需要释放锁、内存、fd等资源;
2024-05-11 03:07:34 +00:00
- [ ] 【常见问题】CHECK_AND_RETURN_LOG_INNER、CHECK_AND_RETURN_RET_LOG_INNER等宏确认无资源漏释放;
- [ ] 【常见问题】函数返回值需与函数签名相同,参数定义需在同一范畴,或同一枚举类型;
- [ ] 【常见问题】格式化打印类型需匹配, 例如: int32_t %d; uint32_t %u; long %ld; unsigned long %lu; long long PRId64(%lld); unsigned long long PRIu64(%llu); int16_t(short) %hd; uint16_t(unsigned short) %hu; int8_t %hhd; uint8_t %hhu;