缓冲区溢出了字符数组上的snprintf

时间:2018-01-29 13:19:25

标签: printf

此代码写入&checksumBuffer[writeIndex]所指向的缓冲区末尾:

char checksumBuffer[MD5_DIGEST_LENGTH*2+2] = {0};
int writeIndex = 0;

for(int i=0; i<MD5_DIGEST_LENGTH; i++, writeIndex+= 2)
{
    snprintf(&checksumBuffer[writeIndex],sizeof(checksumBuffer), "%02x", *checksum++);
}

&checksumBuffer[writeIndex]评估为checksumBuffer + 30。 snprintf()sizeof( checksumBuffer ) + 29指向的缓冲区的开头写入偏移&checksumBuffer[writeIndex]的字节,其容量为34个字节。

偏移量超过容量。 sizeof( checksumBuffer ) + 29评估为63。 溢出发生在堆栈内存中。

1 个答案:

答案 0 :(得分:1)

缓冲区大小错误。你想要

snprintf(&checksumBuffer[writeIndex], sizeof(checksumBuffer) - writeIndex, ...
相关问题