1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-05-16 10:54:53 +03:00

0031008: Application Framework - memcpy-param-overlap reported by Clang address sanitizer in LDOM_XmlReader::ReadRecord()

Use memmove instead of memcpy because of copy of the possible overlapped source and destination parts of the buffer.
This commit is contained in:
mpv 2019-09-30 14:12:35 +03:00 committed by abv
parent 2724a0b3cc
commit 3358ed643b

View File

@ -112,17 +112,20 @@ LDOM_XmlReader::RecordType LDOM_XmlReader::ReadRecord (Standard_IStream& theIStr
} }
else else
{ {
// If we are reading some data, save the beginning and preserve the state // If we are reading some data, save the beginning and preserve the state
if (aStartData /* && aState != STATE_WAITING */) { if (aStartData /* && aState != STATE_WAITING */) {
if (myPtr > aStartData) if (myPtr > aStartData)
theData.rdbuf()->sputn(aStartData, myPtr - aStartData); theData.rdbuf()->sputn(aStartData, myPtr - aStartData);
aStartData = &myBuffer[0]; aStartData = &myBuffer[0];
} }
// Copy the rest of file data to the beginning of buffer // Copy the rest of file data to the beginning of buffer
if (aBytesRest > 0) if (aBytesRest > 0)
memcpy (&myBuffer[0], myPtr, aBytesRest); {
// do not use memcpy here because aBytesRest may be greater than myPtr-myBuffer, so, overlap
memmove (&myBuffer[0], myPtr, aBytesRest);
}
// Read the full buffer and reset start and end buffer pointers // Read the full buffer and reset start and end buffer pointers
myPtr = &myBuffer[0]; myPtr = &myBuffer[0];
Standard_Size aNBytes; Standard_Size aNBytes;