deflatePending not available in zlib on OpenBSD (undefined symbol)

Ken Murchison murch at fastmail.com
Tue Jun 2 16:36:17 EDT 2020


Hi Anatoli,

Thanks for the report.  I'm not sure that we even need the 
deflatePending() call, since we use deflateBound() to create an 
appropriately-sized buffer to hold the entire compressed response body.  
Let me do some testing.


On 6/2/20 3:48 AM, Anatoli wrote:
> Cyrus developers,
>
> Is it possible to somehow rework the code in imap/httpd.c lines 158-169
> in order to NOT use deflatePending as this func is not available on
> OpenBSD? The zlib version there is 1.2.3 and deflatePending appeared in
> 1.2.5 so the code doesn't compile with --enable-http (undefined symbol:
> deflatePending). The packaged version disables http for now.
>
> Is it safe to reduce these lines:
>
>   158         if (!zstrm->avail_out) {
>   159             unsigned pending;
>   160
>   161             zr = deflatePending(zstrm, &pending, Z_NULL);
>   162             if (zr != Z_OK) {
>   163                 /* something went wrong */
>   164                 syslog(LOG_ERR, "zlib deflate error: %d %s", zr,
> zstrm->msg);
>   165                 return -1;
>   166             }
>   167
>   168             buf_ensure(&txn->zbuf, pending);
>   169         }
>
>
> to something like:
>
>   158         if (!zstrm->avail_out) {
>   159             buf_ensure(&txn->zbuf, 256 * 1024);
>   160         }
>
> If I understand it correctly, deflatePending in this case is only used
> to get the needed buffer size and we could replace it with a hardcoded
> buffer size (like in my example of 256K).
>
>
> Thanks,
> Anatoli

-- 
Kenneth Murchison
Senior Software Developer
Fastmail US LLC



More information about the Cyrus-devel mailing list