如何修复Veracode检测到的CWE ID 416: Use After Free释放后使用漏洞
修复方案
Veracode触发CWE ID 416报错的原因是静态安全扫描规则要求:堆内存被释放后,所有指向该内存的指针必须显式置为NULL,避免后续出现野指针误访问的风险。当前代码逻辑本身不存在实际的释放后使用行为,+[NSData dataWithBytes:length:]方法会自动拷贝传入的字节内容,outputBuffer释放不会影响返回的result对象可用性,只是未满足扫描规则的显式置空要求。
修复后的完整代码如下:
+ (NSData *)dataFromBase64String:(NSString *)aString { NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding]; size_t outputLength = 0; void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength); NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength]; free(outputBuffer); outputBuffer = NULL; // 新增释放后置空逻辑,符合Veracode修复要求 return result; }
- 该修复完全兼容原有业务逻辑,不会产生任何功能异常
- 如果存在多个指针指向同一块被释放的堆内存,需要将所有关联指针都置为NULL才能完全通过Veracode扫描校验
内容的提问来源于stack exchange,提问作者Prajnaranjan Das
相关产品推荐
相关产品推荐

