Это код, используемый для раздувания:
z_ret = inflate(&oStream, Z_SYNC_FLUSH);
z_ret
возвращает Z_DATA_ERROR
каждый раз, за исключением первого входящего потока
Согласно веб-странице zlib:
Z_DATA_ERROR
указывает, чтоZ_DATA_ERROR
inflate()
обнаружил ошибку в сжатом формате данных zlib, что означает, что либо данные не являются потоком zlib для начала, либо что данные были повреждены где-то по пути, так как были сжаты.
В качестве альтернативы, возможно, что данные были сжаты с помощью специального словаря дефляции, для чего zlib потребуется для раздувания. Если это так, то в соответствии со ссылкой я упомянул:
... мы не знаем, что такое словарь, поэтому показатель
Z_NEED_DICT
преобразуется вZ_DATA_ERROR
.
Я сам не пользовался zlib, но это намекает на то, что у вас есть поврежденные данные или недостаточно информации для декомпрессии.
Редактирование: просмотрев комментарий Сальсы и более подробно изучая ваш код, неясно, что это актуальная проблема. Вы не указываете, какое значение z_ret
имеет при сбое inflate
.
-3
- этоZ_DATA_ERROR
, поэтому, возможно, произошла ошибка данных.