Это функция, которую я использую для распаковки буфера.Сжатие буфера unzip с большой длиной данных
string unzipBuffer(size_t decryptedLength, unsigned char * decryptedData)
{
z_stream stream;
stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.avail_in = decryptedLength;
stream.next_in = (Bytef *)decryptedData;
stream.total_out = 0;
stream.avail_out = 0;
size_t dataLength = decryptedLength* 1.5;
char c[dataLength];
if (inflateInit2(&stream, 47) == Z_OK)
{
int status = Z_OK;
while (status == Z_OK)
{
if (stream.total_out >= dataLength)
{
dataLength += decryptedLength * 0.5;
}
stream.next_out = (Bytef *)c + stream.total_out;
stream.avail_out = (uint)(dataLength - stream.total_out);
status = inflate (&stream, Z_SYNC_FLUSH);
}
if (inflateEnd(&stream) == Z_OK)
{
if (status == Z_STREAM_END)
{
dataLength = stream.total_out;
}
}
}
std::string decryptedContentStr(c, c + dataLength);
return decryptedContentStr;
}
И это не работает нормально до сегодняшнего дня, когда я понял, что он выходит из строя с большим буфером данных (Ex: decryptedLength: 342792) на этой линии:
status = inflate (&stream, Z_SYNC_FLUSH);
после одного или двух итераций. Кто-нибудь может мне помочь?
Может быть, вы должны точно сказать, как он упал. BTW - может ли это проблема переполнения стека? 'char c [dataLength];' приблизительно. 600 000 символов. – 4386427
Распаковка не расшифровывается. – EJP