Xueming Shen wrote:
:
We can not simply return 0 if the "out" buffer length is NOT 0 even
when "in" buffer length is 0. The de/inflater might
have something to push/flush out even there is no more input. Consider
the buffer in last invocation of de/inflating is
not big enough, de/infalte() gets invoked the second time without any
new data (and the data for the last invocation
has been consumed by the zlib de/inflate). The patch-1 (the second
one) is simply wrong.
It is probably OK to return 0 if the output buffer is 0, I said
"probably" is because I would need to read all those
zlib code again to make sure there is no any internal status change
(for example in case like the "in" buffer is NOT
zero but the "out" buffer is 0, consider the de/inflater might try to
consume more data even the output buffer is
zero) or even if there is an internal status change it would not have
any negative impact. This is why I'm saying
it is probably not worth the effect.
-Sherman
The inflate/deflater state is a good point, in which case you are right
to be cautious as it's easy to get burned in the zip code. If your
replace the "Some weird system" comment with something to say that OOME
is only thrown then the length is not zero then the changes in webrev.00
are okay with me.
-Alan