当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang safeInflate(Z, Data)用法及代码示例


safeInflate(Z, Data) -> Result
OTP 20.1
类型:
Z = zstream()
Data = iodata()
Result = 
    {continue, Output :: iolist()} |
    {finished, Output :: iolist()} |
    {need_dictionary,
     Adler32 :: integer() >= 0,
     Output :: iolist()}

就像inflate/2,但一旦扩展超出实现定义的小阈值,就会返回。它在解压缩不受信任的输入时非常有用,这些输入可能被恶意制作以扩展直到系统耗尽内存。

此函数返回 {continue | finished, Output} ,其中 Output 是在此调用中解压缩的数据。如果需要,新的输入可以在每次调用时排队,并且一旦所有排队的数据被解压缩,该函数将返回{finished, Output}

此函数可能会引入一些输出延迟(读取输入而不产生任何输出)。

如果进一步解压需要预设的字典,该函数返回一个need_dictionary元组。看 inflateSetDictionary/2)了解详情。

例子:

walk(Compressed, Handler) ->
    Z = zlib:open(),
    zlib:inflateInit(Z),
    loop(Z, Handler, zlib:safeInflate(Z, Compressed)),
    zlib:inflateEnd(Z),
    zlib:close(Z).

loop(Z, Handler, {continue, Output}) ->
    Handler(Output),
    loop(Z, Handler, zlib:safeInflate(Z, []));
loop(Z, Handler, {finished, Output}) ->
    Handler(Output).

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 safeInflate(Z, Data) -> Result。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。