mirror of
https://github.com/Huntereb/Awoo-Installer
synced 2024-09-20 06:21:54 +00:00
Aligned memory for encryption to not corrupt nsz files compressed with zstd 1.5.0 and later
This commit is contained in:
parent
664d9f3c6e
commit
b9304c8579
1 changed files with 35 additions and 26 deletions
|
@ -179,6 +179,7 @@ public:
|
||||||
processChunk(m_buffer.data(), m_buffer.size());
|
processChunk(m_buffer.data(), m_buffer.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
encrypt(m_deflateBuffer.data(), m_deflateBuffer.size(), m_offset);
|
||||||
flush();
|
flush();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -237,11 +238,12 @@ public:
|
||||||
|
|
||||||
u64 processChunk(const u8* ptr, u64 sz)
|
u64 processChunk(const u8* ptr, u64 sz)
|
||||||
{
|
{
|
||||||
ZSTD_inBuffer input = { ptr, sz, 0 };
|
while(sz > 0)
|
||||||
m_deflateBuffer.resize(sz);
|
{
|
||||||
m_deflateBuffer.resize(0);
|
const size_t readChunkSz = std::min(sz, buffInSize);
|
||||||
|
ZSTD_inBuffer input = { ptr, readChunkSz, 0 };
|
||||||
|
|
||||||
while (input.pos < input.size)
|
while(input.pos < input.size)
|
||||||
{
|
{
|
||||||
ZSTD_outBuffer output = { buffOut, buffOutSize, 0 };
|
ZSTD_outBuffer output = { buffOut, buffOutSize, 0 };
|
||||||
size_t const ret = ZSTD_decompressStream(dctx, &output, &input);
|
size_t const ret = ZSTD_decompressStream(dctx, &output, &input);
|
||||||
|
@ -249,26 +251,33 @@ public:
|
||||||
if (ZSTD_isError(ret))
|
if (ZSTD_isError(ret))
|
||||||
{
|
{
|
||||||
LOG_DEBUG("%s\n", ZSTD_getErrorName(ret));
|
LOG_DEBUG("%s\n", ZSTD_getErrorName(ret));
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
append(m_deflateBuffer, (const u8*)buffOut, output.pos);
|
size_t len = output.pos;
|
||||||
|
u8* p = (u8*)buffOut;
|
||||||
|
|
||||||
if (m_deflateBuffer.size() >= 0x1000000) // 16 MB
|
while(len)
|
||||||
|
{
|
||||||
|
const size_t writeChunkSz = std::min(0x1000000 - m_deflateBuffer.size(), len);
|
||||||
|
|
||||||
|
append(m_deflateBuffer, p, writeChunkSz);
|
||||||
|
|
||||||
|
if(m_deflateBuffer.size() >= 0x1000000)
|
||||||
{
|
{
|
||||||
encrypt(m_deflateBuffer.data(), m_deflateBuffer.size(), m_offset);
|
encrypt(m_deflateBuffer.data(), m_deflateBuffer.size(), m_offset);
|
||||||
|
|
||||||
flush();
|
flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p += writeChunkSz;
|
||||||
|
len -= writeChunkSz;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_deflateBuffer.size())
|
sz -= readChunkSz;
|
||||||
{
|
ptr += readChunkSz;
|
||||||
encrypt(m_deflateBuffer.data(), m_deflateBuffer.size(), m_offset);
|
|
||||||
|
|
||||||
flush();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue