diff --git a/rpcs3/Crypto/unself.cpp b/rpcs3/Crypto/unself.cpp index df298b434c..3a10863859 100644 --- a/rpcs3/Crypto/unself.cpp +++ b/rpcs3/Crypto/unself.cpp @@ -2,7 +2,7 @@ #include "unself.h" SELFDecrypter::SELFDecrypter(vfsStream& s) - : self_f(s), key_v() + : self_f(s), key_v(), data_buf_length(0) { } @@ -92,9 +92,10 @@ bool SELFDecrypter::LoadHeaders(bool isElf32) { ControlInfo* cinfo = new ControlInfo(); cinfo->Load(self_f); - ctrlinfo_arr.Move(cinfo); i += cinfo->size; + + ctrlinfo_arr.Move(cinfo); } // Read ELF section headers. @@ -369,6 +370,9 @@ bool SELFDecrypter::DecryptData() self_f.Seek(meta_shdr[i].data_offset); self_f.Read(buf, meta_shdr[i].data_size); + // Zero out our ctr nonce + memset(ctr_stream_block, 0, sizeof(ctr_stream_block)); + // Perform AES-CTR encryption on the data blocks. aes_setkey_enc(&aes, data_key, 128); aes_crypt_ctr(&aes, meta_shdr[i].data_size, &ctr_nc_off, data_iv, ctr_stream_block, buf, buf); diff --git a/rpcs3/Emu/Memory/Memory.cpp b/rpcs3/Emu/Memory/Memory.cpp index 8bf12506dc..234432aaab 100644 --- a/rpcs3/Emu/Memory/Memory.cpp +++ b/rpcs3/Emu/Memory/Memory.cpp @@ -535,7 +535,7 @@ template<> __forceinline u64 MemoryBase::ReverseData<2>(u64 val) { return Revers template<> __forceinline u64 MemoryBase::ReverseData<4>(u64 val) { return Reverse32(val); } template<> __forceinline u64 MemoryBase::ReverseData<8>(u64 val) { return Reverse64(val); } -VirtualMemoryBlock::VirtualMemoryBlock() : MemoryBlock() +VirtualMemoryBlock::VirtualMemoryBlock() : MemoryBlock(), m_reserve_size(0) { } diff --git a/rpcs3/Emu/Memory/MemoryBlock.h b/rpcs3/Emu/Memory/MemoryBlock.h index 2b0d11c04e..1e4bc16415 100644 --- a/rpcs3/Emu/Memory/MemoryBlock.h +++ b/rpcs3/Emu/Memory/MemoryBlock.h @@ -13,7 +13,7 @@ struct MemInfo { } - MemInfo() + MemInfo() : addr(0), size(0) { } };