Patch Set 3:

Robin, yes I fixed an infinite loop here.  There are conditions where inflate() returns 0 and yet finished() returns false, and so does needsInput().  This now crashes with a CorruptObjectException, rather than trying to call inflate again.

AFAIK this can only happen when the inflation stream is corrupted and the bit sequence implies that a dictionary is required here, but we haven't supplied one to the Inflater.