[JDK-6341887] Patch: java.util.zip: Add ByteBuffer methods to Inflater/Deflater

Alan Bateman Alan.Bateman at oracle.com
Sun Feb 18 09:33:23 UTC 2018

On 16/02/2018 22:13, David Lloyd wrote:
> It would be convenient to be able to inflate/deflate a direct or heap
> byte buffer without having to copy it through an array first.  For my
> Friday mini-project this week, I've decided to take a crack at this.
> The attached patch is the result.  Would anyone be interested in
> reviewing and maybe sponsoring this change?  It would be really great
> to get it in to JDK 11.
> The patch includes a modification to FlaterTest to run through
> permutations of using direct and heap byte buffers.  Though I couldn't
> get jtreg working, I did compile and run the test by hand and it seems
> to pass; the build also works fine with the new code.
> Extra thanks to Martin Balao for pointing me towards mapfile-vers when
> I couldn't figure out why I was getting UnsatisfiedLinkError.  That
> one was not obvious.
Thanks for bringing this one up again, I think the last time that it was 
discussed here was in 2012 when Martin Kirst proposed a patch to add 
these methods. If you go through the archives then you'll see there were 
several issues with that proposal before the discussion petered out.

I see Sherman is looking at implementation so I'll stick with the 
javadoc for now. At some point it will need a security review to ensure 
that there no possibility of tricking the implementation to access 
memory outside of the input/output. That is, we have to assume the user 
of setInput(ByteBuffer) is evil and will change the position/limit 
during deflate operations. I see the patch computes clamps the remainder 
before accessing memory, it will just need a closer look to make sure 
there are no issues. The patch will also need adjustments to make it 
consistent with the existing code but that can come later.

On the APIs then the inflate and deflate methods look okay, I'll less 
sure that  setDcitionary(ByteBuffer) is really needed. Are you adding 
for setDcitionary(ByteBuffer) for consistency?

The javadoc doesn't currently specify how it works with the buffer, e.g. 
inflate(ByteBuffer) doesn't specify that adds it bytes to the buffer 
starting at its position, it doesn't say if the position is adjusted. 
The javadoc will also need to set expectations on behavior when 
DataFormatException is thrown, is the position guaranteed to be 
unchanged or is it unspecified?


More information about the core-libs-dev mailing list