1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-06-27 23:14:05 +00:00

fixed heap overflow

This commit is contained in:
Blake Warner 2022-02-05 15:37:51 -05:00
parent a054cb622b
commit 35b278896f

View File

@ -103,7 +103,45 @@ const volatile unsigned char One2Eight[2] =
void UnswapCopyWrap(const u8 *src, word srcIdx, u8 *dest, word destIdx, word destMask, word numBytes)
{
#ifdef NATIVE
memcpy(dest + destIdx, src + srcIdx, numBytes);
// copy leading bytes
word leadingBytes = srcIdx & 3;
if(leadingBytes != 0)
{
leadingBytes = 4 - leadingBytes;
if(leadingBytes > numBytes)
leadingBytes = numBytes;
numBytes -= leadingBytes;
for(u32 i = 0; i < leadingBytes; i++)
{
dest[destIdx & destMask] = src[srcIdx];
++destIdx;
++srcIdx;
}
}
// copy dwords
int numDWords = numBytes >> 2;
while(numDWords--)
{
dest[(destIdx + 0) & destMask] = src[srcIdx++];
dest[(destIdx + 1) & destMask] = src[srcIdx++];
dest[(destIdx + 2) & destMask] = src[srcIdx++];
dest[(destIdx + 3) & destMask] = src[srcIdx++];
destIdx += 4;
}
// copy trailing bytes
int trailingBytes = numBytes & 3;
if(trailingBytes)
{
for(int i = 0; i < trailingBytes; i++)
{
dest[destIdx & destMask] = src[srcIdx];
++destIdx;
++srcIdx;
}
}
#else
// copy leading bytes
word leadingBytes = srcIdx & 3;