RVZ: Fix undefined behaviour when copying 0 bytes to a null pointer

A vector of length 0 can have a null data pointer, which causes UB when
passed to memcpy, so only copy when we actually have data to copy. This
caused crashes in certain cases when compiling Dolphin with Clang and
LTO enabled.
This commit is contained in:
Ferdinand Bachmann 2024-08-27 17:59:14 +02:00
parent 27c71017fa
commit 6245dcd57d
1 changed files with 8 additions and 1 deletions

View File

@ -765,7 +765,14 @@ bool WIARVZFileReader<RVZ>::Chunk::Decompress()
const size_t bytes_to_move = m_out.bytes_written - m_out_bytes_used_for_exceptions;
DecompressionBuffer in{std::vector<u8>(bytes_to_move), bytes_to_move};
std::memcpy(in.data.data(), m_out.data.data() + m_out_bytes_used_for_exceptions, bytes_to_move);
// Copying to a null pointer is undefined behaviour, so only copy when we
// actually have data to copy.
if (bytes_to_move > 0)
{
std::memcpy(in.data.data(), m_out.data.data() + m_out_bytes_used_for_exceptions,
bytes_to_move);
}
m_out.bytes_written = m_out_bytes_used_for_exceptions;