如何修复Veracode扫描报告中CWE ID 252的Unchecked Return Value错误?
修复方案
CWE ID 252漏洞触发的核心原因是malloc函数执行内存分配时可能因系统内存不足等场景返回NULL,原代码未校验该返回值就直接将指针传入后续sysctlbyname调用,存在空指针访问的安全风险。
修复后的完整代码
char *machine = malloc(size); // 新增malloc返回值非空校验 if (machine == NULL) { // 内存分配失败时的业务处理逻辑,可根据实际需求调整,示例为返回空字符串 NSString *platform = @""; } else { // 仅分配成功时执行后续系统调用和字符串转换逻辑 sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine); }
补充说明
- 内存分配失败分支的处理逻辑可按需调整,比如返回默认平台标识、向上层抛出异常等,只要保证不会对NULL指针做读写操作即可
- 你也可以额外补充
sysctlbyname的返回值校验,该系统调用执行失败时也会返回非0的错误码,增加对应校验可以进一步提升代码鲁棒性 - 不需要在
machine为NULL的分支执行free操作,虽然C标准规定传入NULL到free是安全的,但分支隔离后逻辑可读性更高
内容的提问来源于stack exchange,提问作者Prajnaranjan Das
相关产品推荐
相关产品推荐

