可能重复:
Why is my string potentially unsecure in my iOS application?
自将XCode升级到4.6以来的新编译器警告:
最后一行展示警告的最小例子:
for (NSUInteger i = 0; i < 10; i++) {
NSString *res = [testInstance generate:i];
NSString *desc = [NSString stringWithFormat:@"TestData: %d", i];
STAssertNotNil(res, desc);
STAssertNotEquals(@"", res, desc);
}
我查看了其他涉及此警告的问题,但它们源于程序员不必要地使用stringWithFormat:
- 这里我想要一个动态断言描述,每次迭代都会改变,但不是每次检查。
我可以将格式字符串和数据传递给Asserts,但是我必须单独维护这些描述。
如果我要求在日志消息中使用描述格式化或断言呼叫,我该如何避免此警告?
答案 0 :(得分:4)
问题是断言中的非文字格式字符串。将它们更改为:
STAssertNotNil(res, @"%@", desc);
STAssertNotEquals(@"", res, @"%@", desc);
格式字符串是一个常见的安全问题。当它们对编译器不可见时,它无法检查它们。在您的情况下,它们已隐藏在desc
。