There is no guarantee that the 'unused' area of MemBlob is actually
unused. For example if a read buffer was being filled into the
rawSpace() of a SBuf or MemBlob it will overlap with this empty area
until a read call updates the related size state in MemBlob/SBuf.
For these cases we must use memmove() which guarantees no buffer
corruption will take place on memory overlaps.
if (n > 0) { // appending zero bytes is allowed but only affects the stats
Must(willFit(n));
Must(source);
- /// \note memcpy() is safe because we copy to an unused area
- memcpy(mem + size, source, n);
+ memmove(mem + size, source, n);
size += n;
}
++Stats.append;