MS .Net的一个BUG?
.Net V4下面的Buffer类封装了这么一个方法,如果留意注释部分,可以发现这一句不仅导致没有复制正确的数据,而且有可能溢出。
正确的写法应该是将这两行代码调整到下一行。
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success), ForceTokenStabilization, SecurityCritical]
internal static unsafe void memcpyimpl(byte* src, byte* dest, int len)
{
if (len >= 0x10)
{
do
{
*((int*) dest) = *((int*) src);
*((int*) (dest + 4)) = *((int*) (src + 4));
*((int*) (dest + 8)) = *((int*) (src + 8));
*((int*) (dest + 12)) = *((int*) (src + 12));
dest += 0x10;
src += 0x10;
}
while ((len -= 0x10) >= 0x10);
}
if (len > 0)
{
if ((len & 8) != 0)
{
*((int*) dest) = *((int*) src);
*((int*) (dest + 4)) = *((int*) (src + 4));
dest += 8;
src += 8;
}
if ((len & 4) != 0)
{
*((int*) dest) = *((int*) src);
dest += 4;
src += 4;
}
if ((len & 2) != 0)
{
*((short*) dest) = *((short*) src);
dest += 2;
src += 2;
}
if ((len & 1) != 0)
{
dest++;//需要调整
src++;//需要调整
dest[0] = src[0];
}
}
}
浙公网安备 33010602011771号