В do c из zlib они пишут:
Если для параметра flu sh установлено значение Z_FINI SH, ожидающий ввод обрабатывается в ожидании вывод сбрасывается, и deflate возвращается с Z_STREAM_END, если было достаточно выходного пространства. Если deflate возвращает с Z_OK или Z_BUF_ERROR, эта функция должна быть вызвана снова с Z_FINI SH и большим выходным пространством (обновлн.в_доступе), но без дополнительных входных данных, пока не вернется с Z_STREAM_END или ошибкой. После того, как deflate вернул Z_STREAM_END, единственными возможными операциями в потоке являются deflateReset или deflateEnd.
Таким образом, ему нужно больше буфера, отметив, что у вас есть буфер 500, но только скажите, что в наличии 50, что может быть ошибка, иначе вам нужно больше логики c, чтобы добавить больше буфера.