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];
} } }