我读过下面的vulnerability report in grep和the associated commit,其中所有的integer
和unsigned integer
都被size_t
替换。
我有一个简单的问题:用unsigned integer
替换size_t
是为了避免数字溢出(还是其他类型的攻击)如果这是为什么(事实上,我没有看到它有什么变化,因为我认为size_t
的定义是typedef unsigned int size_t;
)。
最佳答案
在您的系统上,size_t可能是typedef'to unsigned int,但在其他系统上可能不是这样,特别是嵌入式(非X86)系统。根据ANSI标准,无符号整数可以小到16位。
在每个系统上定义size_t,以确保其足够大,以给出该系统上任何可能对象的大小。
在这个漏洞的情况下,我猜(unsigned In t)->(size_t)实际上不是修复的一部分,至少在X86系统上是这样,而是相关清理的一部分,以确保不会留下任何问题。
这也是很好的编程实践。
关于c - 是否将int转换为size-t以避免数字溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15120565/