[erlang-questions] zlib deflate problem

Colm <>
Mon May 19 19:55:34 CEST 2008


I'm having a problem with erlang's zlib/deflate.  The problem is that
if I try to deflate a piece of data that is a multiple of 4000 bytes
(which also happens to be the zlib internal buffer size, I noticed)
and then inflate it I get an inflate exception.  Below is some sample

I realize I can set different internal buffer size using
zlib:setBufSize but that doesn't really help as I can't predict the
size of data I will be deflating/inflating.

Am I doing something dumb here or is this a bug in the erlang zlib
interface?  I strongly suspect it is the former.


-export([start/0, start/1]).

-define(DATA_SIZE, 4000).

start() ->

start(DataSize) ->
   % Generate a binary of size "0" x DATA_SIZE
   Data = list_to_binary(
       lists:map(fun(_) -> 0 end, lists:seq(1, DataSize))
   io:format("Raw data -> ~p~n", [size(Data)]),

   ZInflate = zlib:open(),
   ok = zlib:inflateInit(ZInflate),

   ZDeflate = zlib:open(),
   ok = zlib:deflateInit(ZDeflate),

   Deflated = zlib:deflate(ZDeflate, Data, sync),
   io:format("Deflated -> ~p~n", [Deflated]),

   Inflated = case catch zlib:inflate(ZInflate, Deflated) of
       {'EXIT', {'data_error', _Backtrace} } ->
           io:format("zlib:inflate data_error~n"),
       {'EXIT', Reason} ->
           io:format("zlib:inflate error -> [~p]~n", [Reason]),
       [] ->
           io:format("zlib:inflate empty response~n"), [];
       Iolist ->

   io:format("Inflated -> ~p~n", [iolist_size(Inflated)]),


More information about the erlang-questions mailing list