此代码写入&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。
溢出发生在堆栈内存中。
答案 0 :(得分:1)
缓冲区大小错误。你想要
snprintf(&checksumBuffer[writeIndex], sizeof(checksumBuffer) - writeIndex, ...