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:
parent
27c71017fa
commit
6245dcd57d
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue